DMP监测获取imei数目
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…
Reference in New Issue