|
|
|
@ -30,7 +30,10 @@ import com.baiye.modules.system.repository.TaskRepository;
|
|
|
|
|
import com.baiye.modules.system.repository.UserRepository;
|
|
|
|
|
import com.baiye.modules.system.service.CompanyService;
|
|
|
|
|
import com.baiye.modules.telemarkting.dao.AllCallInfoRepository;
|
|
|
|
|
import com.baiye.modules.telemarkting.dao.CallClueRepository;
|
|
|
|
|
import com.baiye.modules.telemarkting.entity.AllCallInfo;
|
|
|
|
|
import com.baiye.modules.telemarkting.entity.CallClueInfo;
|
|
|
|
|
import com.baiye.timed.ReportSync;
|
|
|
|
|
import com.baiye.util.DateTimeUtil;
|
|
|
|
|
import com.baiye.util.ExportExcelUtil;
|
|
|
|
|
import com.baiye.util.SecurityUtils;
|
|
|
|
@ -60,6 +63,8 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
private final UserReportRepository userReportRepository;
|
|
|
|
|
private final SourceClueClient sourceClueClient;
|
|
|
|
|
private final UserRepository userRepository;
|
|
|
|
|
private final CallClueRepository callClueRepository;
|
|
|
|
|
private final ReportSync reportSync;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计昨日 公司下所有任务的合并
|
|
|
|
@ -69,14 +74,13 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
@Override
|
|
|
|
|
public CommonResponse<Object> getReportByAll() {
|
|
|
|
|
Long companyId = SecurityUtils.getCompanyId();
|
|
|
|
|
String beginOfDay = DateUtil.beginOfDay(DateUtil.yesterday()).toString();
|
|
|
|
|
String endOfDay = DateUtil.endOfDay(DateUtil.yesterday()).toString();
|
|
|
|
|
List<TaskReport> list = taskReportRepository.queryAllByTimeAndCompanyId(beginOfDay, endOfDay, companyId);
|
|
|
|
|
String beginOfDay = DateUtil.beginOfDay(DateUtil.date()).toString();
|
|
|
|
|
String endOfDay = DateUtil.date().toString();
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndCompanyId(beginOfDay, endOfDay, companyId);
|
|
|
|
|
//对查询的数据进行处理
|
|
|
|
|
MemberInfoVO messageInfo = getAllTaskInfo(list);
|
|
|
|
|
MemberInfoVO messageInfo = getMessageInfo(beginOfDay, endOfDay, callClueInfos);
|
|
|
|
|
return CommonResponse.createBySuccess(messageInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据任务id和时间 统计呼叫信息
|
|
|
|
|
*
|
|
|
|
@ -89,6 +93,19 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
//对参数进行处理
|
|
|
|
|
StatisticalReportDTO condition = getStatisticalReportDTO(s);
|
|
|
|
|
List<TaskReport> taskReports = getTaskReport(condition.getBeginTime(), condition.getEndTime(), condition.getType(), condition.getIds());
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(condition.getEndTime()));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndTaskId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), condition.getIds());
|
|
|
|
|
List<TaskReport> list = reportSync.autoCountReportByTask(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(taskReports)) {
|
|
|
|
|
taskReports = list;
|
|
|
|
|
} else {
|
|
|
|
|
taskReports.addAll(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (taskReports == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("请检查时间类型是否错误");
|
|
|
|
|
}
|
|
|
|
@ -97,6 +114,8 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
taskReports.stream().collect(Collectors.groupingBy(TaskReport::getTaskId, Collectors.toList())).forEach(map::put);
|
|
|
|
|
Date begin = DateUtil.parseDate(condition.getBeginTime());
|
|
|
|
|
Date end = DateUtil.parseDate(condition.getEndTime());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//按月统计
|
|
|
|
|
if (s.getType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
|
for (Long key : map.keySet()) {
|
|
|
|
@ -148,6 +167,19 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
StatisticalReportDTO condition = getStatisticalReportDTO(s);
|
|
|
|
|
List<TaskReport> taskReports = getTaskReport(condition.getBeginTime(), condition.getEndTime(), condition.getType(), condition.getIds());
|
|
|
|
|
List<TaskReport> list = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(condition.getEndTime()));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndTaskId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), condition.getIds());
|
|
|
|
|
List<TaskReport> lists = reportSync.autoCountReportByTask(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(taskReports)) {
|
|
|
|
|
taskReports = lists;
|
|
|
|
|
} else {
|
|
|
|
|
taskReports.addAll(lists);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (taskReports != null && taskReports.size() > 0) {
|
|
|
|
|
//根据任务id合并
|
|
|
|
|
// TODO: 2022/3/18 0018 如果是动态任务,任务的总数是变动的。可能会有影响
|
|
|
|
@ -171,7 +203,7 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出任务的详细信息,改任务下的所有线索信息
|
|
|
|
|
* 导出任务的详细信息,该任务下的所有线索信息
|
|
|
|
|
*
|
|
|
|
|
* @param response
|
|
|
|
|
* @param id
|
|
|
|
@ -260,6 +292,19 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未找到组信息");
|
|
|
|
|
}
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndTeamIds(beginTime, endTime, ids);
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(endTime));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndTeamId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), ids);
|
|
|
|
|
List<UserReport> list = reportSync.autoCountReportByUser(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(userReports)) {
|
|
|
|
|
userReports = list;
|
|
|
|
|
} else {
|
|
|
|
|
userReports.addAll(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<Long, UserReport> map = new HashMap<>();
|
|
|
|
|
//将一个组的数据合并
|
|
|
|
|
for (UserReport info : userReports) {
|
|
|
|
@ -297,6 +342,19 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
throw new BadRequestException(ResponseCode.USER_INFORMATION_ERROR.getDesc());
|
|
|
|
|
}
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndTeamIds(beginTime, endTime, ids);
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(endTime));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndTeamId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), ids);
|
|
|
|
|
List<UserReport> list = reportSync.autoCountReportByUser(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(userReports)) {
|
|
|
|
|
userReports = list;
|
|
|
|
|
} else {
|
|
|
|
|
userReports.addAll(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<Long, UserReport> map = new HashMap<>();
|
|
|
|
|
for (UserReport info : userReports) {
|
|
|
|
|
if (map.containsKey(info.getMemberId())) {
|
|
|
|
@ -324,20 +382,28 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public CommonResponse<Object> getMemberReport(String beginTime, String endTime, Long memberId) {
|
|
|
|
|
String begin;
|
|
|
|
|
String end;
|
|
|
|
|
if (StrUtil.isBlank(beginTime) || StrUtil.isBlank(endTime)) {
|
|
|
|
|
begin = DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd");
|
|
|
|
|
end = DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd");
|
|
|
|
|
} else {
|
|
|
|
|
begin = DateUtil.format(DateUtil.parse(beginTime), "yyyy-MM-dd");
|
|
|
|
|
end = DateUtil.format(DateUtil.parse(endTime), "yyyy-MM-dd");
|
|
|
|
|
beginTime = DateUtil.today();
|
|
|
|
|
endTime = DateUtil.today();
|
|
|
|
|
}
|
|
|
|
|
if (memberId == null) {
|
|
|
|
|
log.error("成员id为空");
|
|
|
|
|
return CommonResponse.createByErrorMessage("成员id为空");
|
|
|
|
|
}
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndId(begin, end, memberId);
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndId(beginTime, endTime, memberId);
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(endTime));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndMemberId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), memberId);
|
|
|
|
|
List<UserReport> list = reportSync.autoCountReportByUser(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(userReports)) {
|
|
|
|
|
userReports = list;
|
|
|
|
|
} else {
|
|
|
|
|
userReports.addAll(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<Long, UserReport> map = new HashMap<>();
|
|
|
|
|
//合并同一个人的线索数据
|
|
|
|
|
for (UserReport info : userReports) {
|
|
|
|
@ -365,16 +431,24 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void downloadMemberReport(HttpServletResponse response, String beginTime, String endTime, Long memberId) {
|
|
|
|
|
String begin;
|
|
|
|
|
String end;
|
|
|
|
|
if (StrUtil.isBlank(beginTime) || StrUtil.isBlank(endTime)) {
|
|
|
|
|
begin = DateUtil.today();
|
|
|
|
|
end = DateUtil.today();
|
|
|
|
|
} else {
|
|
|
|
|
begin = DateUtil.format(DateUtil.parse(beginTime), "yyyy-MM-dd");
|
|
|
|
|
end = DateUtil.format(DateUtil.parse(endTime), "yyyy-MM-dd");
|
|
|
|
|
beginTime = DateUtil.today();
|
|
|
|
|
endTime = DateUtil.today();
|
|
|
|
|
}
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndId(beginTime, endTime, memberId);
|
|
|
|
|
|
|
|
|
|
// TODO: 2022/5/6 0006 这里将统计今日的数据
|
|
|
|
|
boolean betweenDays = DateTimeUtil.betweenByDay(DateUtil.date(), DateUtil.parseDate(endTime));
|
|
|
|
|
if (betweenDays) {
|
|
|
|
|
List<CallClueInfo> callClueInfos = callClueRepository.queryAllByTimeAndMemberId(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), memberId);
|
|
|
|
|
List<UserReport> list = reportSync.autoCountReportByUser(DateUtil.beginOfDay(DateUtil.date()).toString(), DateUtil.date().toString(), callClueInfos);
|
|
|
|
|
if (CollUtil.isEmpty(userReports)) {
|
|
|
|
|
userReports = list;
|
|
|
|
|
} else {
|
|
|
|
|
userReports.addAll(list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<UserReport> userReports = userReportRepository.queryAllByTimeAndId(begin, end, memberId);
|
|
|
|
|
|
|
|
|
|
List<MemberInfoVO> listResult = new ArrayList<>();
|
|
|
|
|
for (UserReport info : userReports) {
|
|
|
|
|
MemberInfoVO memberInfoVO = new MemberInfoVO();
|
|
|
|
@ -384,6 +458,15 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
ExportExcelUtil.downloadEasyExcel(response, MemberInfoVO.class, listResult);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public CommonResponse<Object> getTurnOnIds(List<Long> clueIds) {
|
|
|
|
|
List<Long> list = allCallInfoRepository.queryIdsByStatusAndClueId(clueIds, 2);
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list = list.stream().distinct().collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
return CommonResponse.createBySuccess(list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 对传入得条件进行处理
|
|
|
|
|
*/
|
|
|
|
@ -566,6 +649,49 @@ public class QueryReportServiceImpl implements QueryReportService {
|
|
|
|
|
return memberInfoVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计符合条件线索的信息
|
|
|
|
|
*/
|
|
|
|
|
private MemberInfoVO getMessageInfo(String begin, String end, List<CallClueInfo> callClueInfos) {
|
|
|
|
|
int usrNum = 0;
|
|
|
|
|
int turnOnNum = 0;
|
|
|
|
|
double turnOnRate = 0.00;
|
|
|
|
|
long breatheTotalDuration = 0;
|
|
|
|
|
double breatheAverageDuration = 0;
|
|
|
|
|
if (CollUtil.isNotEmpty(callClueInfos)) {
|
|
|
|
|
//使用数
|
|
|
|
|
usrNum = callClueInfos.size();
|
|
|
|
|
for (CallClueInfo info : callClueInfos) {
|
|
|
|
|
//接通时才会有通话时长
|
|
|
|
|
long clueId = info.getClueId();
|
|
|
|
|
List<AllCallInfo> doubleCallInfo = allCallInfoRepository.queryAllByTime(begin, end, clueId);
|
|
|
|
|
//统计通话时长
|
|
|
|
|
int doubleClueTime = 0;
|
|
|
|
|
if (CollUtil.isNotEmpty(doubleCallInfo)) {
|
|
|
|
|
doubleClueTime = doubleCallInfo.stream().filter(item -> item.getStatus() == DefaultNumberConstants.TWO_NUMBER).collect(Collectors.toList()).stream().mapToInt(AllCallInfo::getDuration).sum();
|
|
|
|
|
if (doubleClueTime > 0) {
|
|
|
|
|
//有通话时长 说明电话打通
|
|
|
|
|
turnOnNum++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
breatheTotalDuration += doubleClueTime;
|
|
|
|
|
}
|
|
|
|
|
breatheAverageDuration = NumberUtil.div(breatheTotalDuration, callClueInfos.size(), 2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (usrNum != 0) {
|
|
|
|
|
//接通率=接通数/使用数
|
|
|
|
|
turnOnRate = NumberUtil.div(turnOnNum, usrNum, 2);
|
|
|
|
|
}
|
|
|
|
|
MemberInfoVO memberInfoVO = new MemberInfoVO();
|
|
|
|
|
memberInfoVO.setTurnOnNum(turnOnNum);
|
|
|
|
|
memberInfoVO.setTurnOnRate(turnOnRate);
|
|
|
|
|
memberInfoVO.setUsrNum(usrNum);
|
|
|
|
|
memberInfoVO.setBreatheAverageDuration(breatheAverageDuration);
|
|
|
|
|
memberInfoVO.setBreatheTotalDuration(breatheTotalDuration);
|
|
|
|
|
return memberInfoVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询用户信息
|
|
|
|
|
*/
|
|
|
|
|