DMP监测获取imei数目

master
wujingtao 3 years ago
parent c2333826c4
commit e4515af549

@ -0,0 +1,32 @@
package com.baiyee.adcallback.api.controller;
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
import com.baiyee.adcallback.service.DmpMonitorNumService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author wujingtao
* @date 2022/03/01
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/dmp")
public class DmpMonitorNumController {
private final DmpMonitorNumService dmpMonitorNumService;
@PostMapping(value = "/imeiNumber")
public ResponseEntity<Object> getDmpNumByTags(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) {
return new ResponseEntity<>(dmpMonitorNumService.queryNumByTags(dmpMonitorNumDto), HttpStatus.OK);
}
@PostMapping(value = "/imeiLink")
public ResponseEntity<Object> getDmpImeiLink(@RequestBody DmpMonitorNumDto dmpMonitorNumDto) {
return new ResponseEntity<>(dmpMonitorNumService.getDmpImeiLink(dmpMonitorNumDto), HttpStatus.OK);
}
}

@ -0,0 +1,16 @@
package com.baiyee.adcallback.api.dto;
import lombok.Data;
import java.util.Date;
/**
* @author wujingtao
* @date 2022/03/01
*/
@Data
public class DmpMonitorJpaDto {
private String imei;
private Date gmtCreate;
}

@ -0,0 +1,23 @@
package com.baiyee.adcallback.api.dto;
import com.sun.istack.NotNull;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author wujingtao
* @date 2022/03/01
*/
@Data
public class DmpMonitorNumDto {
@NotNull
private Date startTime;
@NotNull
private Date endTime;
@NotNull
private List<String> tags;
private String mail;
}

@ -0,0 +1,15 @@
package com.baiyee.adcallback.service;
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
import java.util.Map;
/**
* @author wujingtao
* @date 2022/03/01
*/
public interface DmpMonitorNumService {
Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto);
Map<String, Object> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto);
}

@ -0,0 +1,135 @@
package com.baiyee.adcallback.service.impl;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
import com.baiyee.adcallback.service.DmpMonitorNumService;
import lombok.RequiredArgsConstructor;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wujingtao
* @date 2022/03/01
*/
@Service
@RequiredArgsConstructor
public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
@PersistenceContext
EntityManager entityManager;
@Override
public Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) {
HashMap<String, Object> map = new HashMap<>();
for (String tag : dmpMonitorNumDto.getTags()) {
List<DmpMonitorJpaDto> imel = getImeiNum(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), tag);
List<HashMap<String, Object>> groupByTime = getGroupByTime(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), imel);
map.put(tag, groupByTime);
}
return map;
}
@Override
public Map<String, Object> getDmpImeiLink(DmpMonitorNumDto dmpMonitorNumDto) {
HashMap<String, Object> map = new HashMap<>();
for (String tag : dmpMonitorNumDto.getTags()) {
List<DmpMonitorJpaDto> imel = getImeiNum(dmpMonitorNumDto.getStartTime(), dmpMonitorNumDto.getEndTime(), tag);
List<String> list = imel.stream().map(DmpMonitorJpaDto::getImei).collect(Collectors.toList());
map.put(tag, list);
}
return map;
}
private List<DmpMonitorJpaDto> getImeiNum(Date startDate, Date endDate, String tag) {
List<DmpMonitorJpaDto> imel = new ArrayList<>();
String tagName = tag.split("-").length > 0 ? tag.split("-")[0] : null;
if (tagName == null) {
return imel;
}
switch (tagName) {
case "jl":
imel = getImeiNumJpa("tb_jl_backdata", startDate, endDate, tag);
break;
case "bd":
imel = getImeiNumJpa("tb_bd_backdata", startDate, endDate, tag);
break;
case "ks":
imel = getImeiNumJpa("tb_ks_backdata", startDate, endDate, tag);
break;
case "uc":
imel = getImeiNumJpa("tb_uc_backdata", startDate, endDate, tag);
break;
default:
break;
}
return imel;
}
//按时间分组
private List<HashMap<String, Object>> getGroupByTime(Date beginTime, Date endTime, List<DmpMonitorJpaDto> iemi) {
List<HashMap<String, Object>> list = new ArrayList<>();
int betweenDay = (int) DateUtil.between(beginTime, endTime, DateUnit.DAY);
for (int i = 0; i <= betweenDay; i++) {
HashMap<String, Object> map = new HashMap<>();
Date dateTime = DateUtil.offsetDay(beginTime, i);
List<DmpMonitorJpaDto> collect = iemi.stream().filter(c -> betweenByDay(dateTime, c.getGmtCreate())).collect(Collectors.toList());
map.put("date", dateTime);
map.put("num", collect.size());
list.add(map);
}
return list;
}
private static Boolean betweenByDay(Date begin, Date end) {
begin = DateUtil.parse(DateUtil.format(begin, "yyyy-MM-dd"));
end = DateUtil.parse(DateUtil.format(end, "yyyy-MM-dd"));
long between = DateUtil.between(begin, end, DateUnit.DAY);
if (between == 0) {
return true;
}
return false;
}
@Transactional(rollbackFor = Exception.class)
public List<DmpMonitorJpaDto> getImeiNumJpa(String tableName, Date startDate, Date endDate, String tag) {
StringBuilder sql = new StringBuilder();
sql.append("select tb.gmt_create as gmtCreate ,tb.imei as imei from " + tableName + " as tb where 1=1");
sql.append(" and tb.imei != :imei1 ");
sql.append(" and tb.imei != :imei2 ");
sql.append(" and tb.gmt_create >= :startDate ");
sql.append(" and tb.gmt_create <= :endDate ");
sql.append(" and tb.tag = :tag ");
Query query = entityManager.createNativeQuery(sql.toString());
query.setParameter("imei1", "");
query.setParameter("imei2", "__IMEI__");
query.setParameter("startDate", startDate);
query.setParameter("endDate", endDate);
query.setParameter("tag", tag);
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List list = query.getResultList();
return getDmpMonitorJpaDto(list);
}
private List<DmpMonitorJpaDto> getDmpMonitorJpaDto(List list) {
List<DmpMonitorJpaDto> tradeList = new ArrayList<>();
for (Object obj : list) {
Map row = (Map) obj;
DmpMonitorJpaDto trade = new DmpMonitorJpaDto();
trade.setImei((String) row.get("imei"));
trade.setGmtCreate((Date) row.get("gmtCreate"));
tradeList.add(trade);
}
return tradeList;
}
}
Loading…
Cancel
Save