|
|
|
@ -1,15 +1,21 @@
|
|
|
|
|
package com.baiye.module.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
|
import cn.hutool.core.date.DateUnit;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.baiye.constant.ClueTypeConstants;
|
|
|
|
|
import com.baiye.constant.DefaultNumberConstants;
|
|
|
|
|
import com.baiye.exception.BadRequestException;
|
|
|
|
|
import com.baiye.feign.TaskClient;
|
|
|
|
|
import com.baiye.feign.UserClient;
|
|
|
|
|
import com.baiye.http.CommonResponse;
|
|
|
|
|
import com.baiye.model.dto.HomePageReportDTO;
|
|
|
|
|
import com.baiye.module.dao.ClueMiddleRepository;
|
|
|
|
|
import com.baiye.module.dao.ReportTokerRepository;
|
|
|
|
|
import com.baiye.module.entity.ClueMiddle;
|
|
|
|
|
import com.baiye.module.entity.ReportToker;
|
|
|
|
|
import com.baiye.module.entity.Task;
|
|
|
|
|
import com.baiye.module.entity.dto.ReportTokerDTO;
|
|
|
|
@ -38,6 +44,7 @@ public class ReportTokerServiceImpl implements ReportTokerService {
|
|
|
|
|
private final UserClient userClient;
|
|
|
|
|
|
|
|
|
|
private final ReportSync reportSync;
|
|
|
|
|
private final ClueMiddleRepository clueMiddleRepository;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> reportTokerBroken(ReportTokerDTO reportTokerDTO) {
|
|
|
|
@ -92,42 +99,30 @@ public class ReportTokerServiceImpl implements ReportTokerService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 实时处理当天的数据
|
|
|
|
|
*
|
|
|
|
|
* @param endTime
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private List<ReportToker> getTodayData(String endTime) {
|
|
|
|
|
long between = DateUtil.between(DateUtil.parseDate(endTime), DateUtil.parseDate(DateUtil.today()), DateUnit.DAY);
|
|
|
|
|
//TODO 需要实时查询当天的统计
|
|
|
|
|
// 需要实时查询当天的统计
|
|
|
|
|
if (between == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
return reportSync.dealData(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.endOfDay(DateUtil.date()).toString());
|
|
|
|
|
}
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 只查任务的
|
|
|
|
|
*
|
|
|
|
|
* @param beginTime
|
|
|
|
|
* @param endTime
|
|
|
|
|
* @param reportTokers
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private Map<String, Object> dealReportData(String beginTime, String endTime, Long taskId, Long memberId, List<ReportToker> reportTokers) {
|
|
|
|
|
|
|
|
|
|
Date start = DateUtil.parseDate(beginTime);
|
|
|
|
|
Date end = DateUtil.parseDate(endTime);
|
|
|
|
|
int between = (int) DateUtil.between(start, end, DateUnit.DAY);
|
|
|
|
|
// Map<Date, List<ReportToker>> collect = reportTokers.stream().collect(Collectors.groupingBy(ReportToker::getCreateTime, Collectors.toList()));
|
|
|
|
|
List<HashMap<String, Object>> list = new ArrayList<>();
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
Map<String, Object> map = new HashMap<>(2);
|
|
|
|
|
String userName = null;
|
|
|
|
|
if (CollUtil.isNotEmpty(reportTokers)) {
|
|
|
|
|
userName = reportTokers.get(0).getMemberName();
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i <= between; i++) {
|
|
|
|
|
Date date = DateUtil.offsetDay(start, i);
|
|
|
|
|
HashMap<String, Object> dataMap = new HashMap<>();
|
|
|
|
|
HashMap<String, Object> dataMap = new HashMap<>(8);
|
|
|
|
|
int intention = 0;
|
|
|
|
|
int notIntention = 0;
|
|
|
|
|
int notTurnOn = 0;
|
|
|
|
@ -170,7 +165,7 @@ public class ReportTokerServiceImpl implements ReportTokerService {
|
|
|
|
|
@Cacheable(value = "taskName", key = "'task:name:' + #p0")
|
|
|
|
|
public String findByTaskId(Long taskId) {
|
|
|
|
|
Task body = taskClient.queryDetails(taskId).getBody();
|
|
|
|
|
if (ObjectUtil.isNotEmpty(body)) {
|
|
|
|
|
if (body != null) {
|
|
|
|
|
return body.getTaskName();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
@ -188,7 +183,7 @@ public class ReportTokerServiceImpl implements ReportTokerService {
|
|
|
|
|
List<ReportToker> todayData = getTodayData(reportTokerDTO.getEndTime());
|
|
|
|
|
tokers.addAll(todayData);
|
|
|
|
|
Map<Long, List<ReportToker>> tokerByTaskId = tokers.stream().collect(Collectors.groupingBy(ReportToker::getTaskId, Collectors.toList()));
|
|
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
|
|
HashMap<String, Object> map = new HashMap<>(5);
|
|
|
|
|
for (Long taskId : tokerByTaskId.keySet()) {
|
|
|
|
|
String taskName = findByTaskId(taskId);
|
|
|
|
|
List<ReportToker> tokerByTaskIdList = tokerByTaskId.get(taskId);
|
|
|
|
@ -209,4 +204,91 @@ public class ReportTokerServiceImpl implements ReportTokerService {
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public CommonResponse<Map<String, HomePageReportDTO>> getReportHomePage(Long userId) {
|
|
|
|
|
Map<String, HomePageReportDTO> map = new HashMap<>(2);
|
|
|
|
|
List<ClueMiddle> clueMiddles = clueMiddleRepository.findClueMiddleByCreateBy(userId);
|
|
|
|
|
if (CollUtil.isNotEmpty(clueMiddles)) {
|
|
|
|
|
HomePageReportDTO crmReport = new HomePageReportDTO().init();
|
|
|
|
|
HomePageReportDTO talkReport = new HomePageReportDTO().init();
|
|
|
|
|
for (ClueMiddle clueMiddle : clueMiddles) {
|
|
|
|
|
//crm
|
|
|
|
|
if (Arrays.asList(ClueTypeConstants.SCREEN_TYPE).contains(clueMiddle.getClueType())) {
|
|
|
|
|
dealData(clueMiddle, crmReport, 1);
|
|
|
|
|
|
|
|
|
|
} else if (Arrays.asList(ClueTypeConstants.TOKER_TYPE).contains(clueMiddle.getClueType())) {
|
|
|
|
|
//拓客投流
|
|
|
|
|
dealData(clueMiddle, talkReport, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
map.put("crm", rate(crmReport));
|
|
|
|
|
map.put("talk", rate(talkReport));
|
|
|
|
|
}
|
|
|
|
|
return CommonResponse.createBySuccess(map);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private HomePageReportDTO rate(HomePageReportDTO report) {
|
|
|
|
|
double usrRate = 0.00;
|
|
|
|
|
double turnRate = 0.00;
|
|
|
|
|
if (report.getTotalNum() != DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
usrRate = NumberUtil.div(report.getUsrNum(), report.getTotalNum(), 2).doubleValue();
|
|
|
|
|
}
|
|
|
|
|
if (report.getUsrNum() != DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
turnRate = NumberUtil.div(report.getTurnOnNum(), report.getUsrNum(), 2).doubleValue();
|
|
|
|
|
}
|
|
|
|
|
report.setUsrNumRate(usrRate);
|
|
|
|
|
report.setTurnOnRate(turnRate);
|
|
|
|
|
return report;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void dealData(ClueMiddle clueMiddle, HomePageReportDTO report, Integer flag) {
|
|
|
|
|
Integer clueType = clueMiddle.getClueType();
|
|
|
|
|
report.setTotalNum(report.getTotalNum() + 1);
|
|
|
|
|
//来源
|
|
|
|
|
if (flag == 1) {
|
|
|
|
|
//投流来源
|
|
|
|
|
if (clueType == DefaultNumberConstants.SEVEN_NUMBER) {
|
|
|
|
|
report.setDeliveryNum(report.getDeliveryNum() + 1);
|
|
|
|
|
} else if (clueType == DefaultNumberConstants.SIX_NUMBER) {
|
|
|
|
|
report.setTalkNum(report.getTalkNum() + 1);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//投流来源
|
|
|
|
|
if (clueType == DefaultNumberConstants.FIVE_NUMBER) {
|
|
|
|
|
report.setDeliveryNum(report.getDeliveryNum() + 1);
|
|
|
|
|
} else if (clueType == DefaultNumberConstants.FOUR_NUMBER) {
|
|
|
|
|
report.setTalkNum(report.getTalkNum() + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//昨日新增
|
|
|
|
|
DateTime yesterday = DateUtil.yesterday();
|
|
|
|
|
if (clueMiddle.getCreateTime() != null && DateUtil.betweenDay(clueMiddle.getCreateTime(), yesterday, true) == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
report.setAddTotalNum(report.getAddTotalNum() + 1);
|
|
|
|
|
if (flag == 1) {
|
|
|
|
|
if (clueType == DefaultNumberConstants.SEVEN_NUMBER) {
|
|
|
|
|
report.setAddDeliveryNum(report.getAddDeliveryNum() + 1);
|
|
|
|
|
} else if (clueType == DefaultNumberConstants.SIX_NUMBER) {
|
|
|
|
|
report.setAddTalkNum(report.getAddTalkNum() + 1);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (clueType == DefaultNumberConstants.FIVE_NUMBER) {
|
|
|
|
|
report.setAddDeliveryNum(report.getAddDeliveryNum() + 1);
|
|
|
|
|
} else if (clueType == DefaultNumberConstants.FOUR_NUMBER) {
|
|
|
|
|
report.setAddTalkNum(report.getAddTalkNum() + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//今日实时
|
|
|
|
|
DateTime today = DateUtil.date();
|
|
|
|
|
if (clueMiddle.getNewestCallTime() != null && DateUtil.betweenDay(clueMiddle.getNewestCallTime(), today, true) == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
if (clueMiddle.getClueCallStatus() == DefaultNumberConstants.ONE_NUMBER) {
|
|
|
|
|
report.setUsrNum(report.getUsrNum() + 1);
|
|
|
|
|
} else if (clueMiddle.getClueCallStatus() == DefaultNumberConstants.TWO_NUMBER) {
|
|
|
|
|
report.setTurnOnNum(report.getTurnOnNum() + 1);
|
|
|
|
|
report.setUsrNum(report.getUsrNum() + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|