|
|
|
@ -12,6 +12,7 @@ import cn.hutool.json.JSONObject;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
import com.baiye.constant.ClueTypeConstants;
|
|
|
|
|
import com.baiye.constant.DefaultNumberConstants;
|
|
|
|
|
import com.baiye.constant.SecurityConstants;
|
|
|
|
|
import com.baiye.enums.ClueStageEnum;
|
|
|
|
|
import com.baiye.exception.BadRequestException;
|
|
|
|
|
import com.baiye.feign.OrganizeClient;
|
|
|
|
@ -25,12 +26,16 @@ import com.baiye.module.entity.ClueMiddle;
|
|
|
|
|
import com.baiye.module.entity.Task;
|
|
|
|
|
import com.baiye.module.entity.TurnoverRecord;
|
|
|
|
|
import com.baiye.module.entity.dto.ReportTokerDTO;
|
|
|
|
|
import com.baiye.module.entity.dto.UploadCrmDTO;
|
|
|
|
|
import com.baiye.module.entity.dto.UploadTokerDTO;
|
|
|
|
|
import com.baiye.module.service.ReportCrmService;
|
|
|
|
|
import com.baiye.util.ExportExcelUtil;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@ -195,6 +200,44 @@ public class ReportCrmServiceImpl implements ReportCrmService {
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void downloadReportCrm(HttpServletResponse response, ReportTokerDTO reportTokerDTO) {
|
|
|
|
|
dealTime(reportTokerDTO, DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
//如果任务id为空 ,默认查询5个任务
|
|
|
|
|
if (CollUtil.isEmpty(reportTokerDTO.getTaskIds())) {
|
|
|
|
|
List<Long> taskIds = getTaskIds(reportTokerDTO.getMemberId(), DefaultNumberConstants.THREE_NUMBER);
|
|
|
|
|
reportTokerDTO.setTaskIds(taskIds);
|
|
|
|
|
}
|
|
|
|
|
List<ClueMiddle> clueMiddles = clueMiddleRepository.reportClueByTaskIdAndStage(reportTokerDTO.getTaskIds(), reportTokerDTO.getBeginTime(), reportTokerDTO.getEndTime(), null);
|
|
|
|
|
List<UploadCrmDTO> list = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isEmpty(clueMiddles)) {
|
|
|
|
|
throw new BadRequestException("无数据导出");
|
|
|
|
|
}
|
|
|
|
|
HashMap<Long, List<ClueMiddle>> map = new HashMap<>(clueMiddles.stream().collect(Collectors.groupingBy(ClueMiddle::getTaskId, Collectors.toList())));
|
|
|
|
|
for (Long taskId : reportTokerDTO.getTaskIds()) {
|
|
|
|
|
List<ClueMiddle> clueMiddles1 = map.get(taskId);
|
|
|
|
|
if (CollUtil.isEmpty(clueMiddles1)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
HashMap<String, Object> reportMap = getReportMap(clueMiddles1);
|
|
|
|
|
UploadCrmDTO uploadCrmDTO = new UploadCrmDTO();
|
|
|
|
|
uploadCrmDTO.setTaskName(findByTaskId(taskId));
|
|
|
|
|
uploadCrmDTO.setBeginTime(reportTokerDTO.getBeginTime());
|
|
|
|
|
uploadCrmDTO.setEndTime(reportTokerDTO.getEndTime());
|
|
|
|
|
uploadCrmDTO.setNewClue((int) reportMap.get("newClue"));
|
|
|
|
|
uploadCrmDTO.setCommunicat((int) reportMap.get("communicat"));
|
|
|
|
|
uploadCrmDTO.setIntention((int) reportMap.get("intention"));
|
|
|
|
|
uploadCrmDTO.setAddWechat((int) reportMap.get("addWechat"));
|
|
|
|
|
uploadCrmDTO.setNoIntention((int) reportMap.get("noIntention"));
|
|
|
|
|
uploadCrmDTO.setInviting((int) reportMap.get("inviting"));
|
|
|
|
|
uploadCrmDTO.setInterview((int) reportMap.get("interview"));
|
|
|
|
|
uploadCrmDTO.setDeal((int) reportMap.get("deal"));
|
|
|
|
|
uploadCrmDTO.setEfficient((int) reportMap.get("efficient"));
|
|
|
|
|
list.add(uploadCrmDTO);
|
|
|
|
|
}
|
|
|
|
|
ExportExcelUtil.downloadEasyExcel(response, UploadCrmDTO.class, list, "crm-task");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<HashMap<String, Object>> getOrganizeInfo(String startTime, String endTime, List<Long> organizeIds) {
|
|
|
|
|
//通过组id查询组员
|
|
|
|
|
Map<Long, Map<String, Object>> memberIdByOrganizeIds = organizeClient.findMemberIdByOrganizeIds(organizeIds);
|
|
|
|
@ -320,28 +363,6 @@ public class ReportCrmServiceImpl implements ReportCrmService {
|
|
|
|
|
return hashMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Map<String, Object>> getTimeMap(String startTime, String endTime, List<ClueMiddle> clueMiddles) {
|
|
|
|
|
Date start = DateUtil.parseDate(startTime);
|
|
|
|
|
Date end = DateUtil.parseDate(endTime);
|
|
|
|
|
int between = (int) DateUtil.between(start, end, DateUnit.DAY);
|
|
|
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i <= between; i++) {
|
|
|
|
|
Date date = DateUtil.offsetDay(start, i);
|
|
|
|
|
double turnoverAmount = 0;
|
|
|
|
|
for (ClueMiddle clueMiddle : clueMiddles) {
|
|
|
|
|
Date clueStageTime = clueMiddle.getClueStageTime();
|
|
|
|
|
if (clueStageTime != null && clueMiddle.getTurnoverAmount() != null && Objects.equals(DateUtil.formatDate(date), DateUtil.formatDate(clueStageTime))) {
|
|
|
|
|
turnoverAmount += clueMiddle.getTurnoverAmount();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> map = new HashMap<>(2);
|
|
|
|
|
map.put("time", DateUtil.formatDate(date));
|
|
|
|
|
map.put("turnoverAmount", turnoverAmount);
|
|
|
|
|
list.add(map);
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化时间
|
|
|
|
|
*/
|
|
|
|
@ -369,7 +390,10 @@ public class ReportCrmServiceImpl implements ReportCrmService {
|
|
|
|
|
* 获取5条拓客投流的任务id
|
|
|
|
|
*/
|
|
|
|
|
private List<Long> getTaskIds(Long userId, Integer num) {
|
|
|
|
|
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.SCREEN_TYPE), userId, DefaultNumberConstants.ONE_NUMBER).getBody();
|
|
|
|
|
if (userId == null) {
|
|
|
|
|
throw new BadRequestException("参数异常,缺失用户id");
|
|
|
|
|
}
|
|
|
|
|
Object taskInfos = taskClient.list(Arrays.asList(ClueTypeConstants.SCREEN_TYPE), userId, DefaultNumberConstants.ONE_NUMBER, SecurityConstants.FROM_IN).getBody();
|
|
|
|
|
List<Long> taskSet = new ArrayList<>();
|
|
|
|
|
JSONArray taskList = JSONUtil.parseArray(taskInfos);
|
|
|
|
|
if (CollUtil.isNotEmpty(taskList)) {
|
|
|
|
@ -386,7 +410,7 @@ public class ReportCrmServiceImpl implements ReportCrmService {
|
|
|
|
|
|
|
|
|
|
@Cacheable(value = "taskName", key = "'task:name:' + #p0")
|
|
|
|
|
public String findByTaskId(Long taskId) {
|
|
|
|
|
Task body = taskClient.queryDetails(taskId).getBody();
|
|
|
|
|
Task body = taskClient.queryDetails(taskId, SecurityConstants.FROM_IN).getBody();
|
|
|
|
|
if (body != null) {
|
|
|
|
|
return body.getTaskName();
|
|
|
|
|
}
|
|
|
|
|