修改投流显示

master
wujingtao 2 years ago
parent f5135b645a
commit 10dadbe349

@ -31,7 +31,7 @@ public enum ClueStageEnum {
/**
*
*/
INTENTION(4, "Intention"),
INTENTION(4, "intention"),
/**
*

@ -20,9 +20,14 @@ public class ReportStageAndTurnoverDto {
/**
* id
*/
private Long memberId;
/**
* ids
*/
private List<Long> memberIds;
/**
* id
*/
private List<Long> organizeIds;
}

@ -33,6 +33,7 @@ public class BaseClueMiddle implements Serializable {
@ApiModelProperty(value = "线索阶段修改时间")
@Column(name = "clue_stage_time")
@CreationTimestamp
private Date clueStageTime;
@ApiModelProperty(value = "线索通话状态0无状态 1未接听 2已接通")

@ -202,6 +202,11 @@ public class ClueController {
return clueService.reportClueStageAndTurnover(reportStageAndTurnoverDto);
}
@PostMapping("/report/funnel")
@ApiOperation("销售漏斗图")
public CommonResponse<Object> reportFunnel(@RequestBody ReportStageAndTurnoverDto reportStageAndTurnoverDto) {
return clueService.reportFunnel(reportStageAndTurnoverDto);
}
@PostMapping("/count/memberStatus")

@ -50,5 +50,4 @@ public class ReportTokerController {
public CommonResponse<Map<String, HomePageReportDTO>> getReportHomePage(@RequestParam(value = "userId") Long userId) {
return reportTokerService.getReportHomePage(userId);
}
}

@ -2,6 +2,7 @@ package com.baiye.module.dao;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
@ -62,7 +63,7 @@ public class ClueJpa {
"cm.newest_call_time as newestCallTime ,cm.turnover_amount as turnoverAmount ,cm.clue_type as clueType " +
"from tb_clue as c LEFT JOIN tb_clue_middle as cm on c.id = cm.clue_id where 1=1 ");
List confirmReceipt = getConfirmReceipt(clueQueryCriteria, sql, pageable);
return getTradeInfo(confirmReceipt);
return getTradeInfo(confirmReceipt, clueQueryCriteria.getClueType());
}
/**
@ -193,7 +194,7 @@ public class ClueJpa {
/**
* Dtokeysqlas
*/
private List<ClueDto> getTradeInfo(List list) {
private List<ClueDto> getTradeInfo(List list, Integer clueType) {
List<ClueDto> clueDtoList = new ArrayList<>();
for (Object obj : list) {
Map row = (Map) obj;
@ -214,35 +215,40 @@ public class ClueJpa {
String nid = AESUtils.decrypt(phone, secret);
String key = "task:encryption:" + taskId;
String str = String.valueOf(redisUtils.get(key));
// 查看资源是否需要加密显示
if (isEncryption != null && isEncryption == 1) {
StringBuilder stringBuilder = new StringBuilder(nid);
String strRep = stringBuilder.replace(3, 7, "****").toString();
clueDto.setNid(strRep);
//fixme 投流线索 返回处理
if (clueType == 4) {
clueDto.setNid(RandomUtil.randomString(22));
} else {
// 查看任务是否需要加密显示资源
if ("null".equals(str) || StringUtils.isBlank(str)) {
ClueDto clueDtoClient = new ClueDto();
clueDtoClient.setTaskId(taskId.longValue());
clueDtoClient.setIsRedis(1);
Map<String, List<String>> body;
try {
body = organizeClient.getLabel(clueDtoClient).getBody();
} catch (Exception e) {
log.error("Method【getTradeInfo】An error occurred ,error:{},time:{}", e.getMessage(), DateUtil.now());
throw new BadRequestException("获取加密信息错误");
}
if (body != null && body.containsKey("taskIsEncryption")) {
str = body.get("taskIsEncryption").get(0);
}
}
//str此次任务是否加密线索手机号 0:不加密 1:加密
if ("0".equals(str)) {
clueDto.setNid(nid);
} else {
// 查看资源是否需要加密显示
if (isEncryption != null && isEncryption == 1) {
StringBuilder stringBuilder = new StringBuilder(nid);
String strRep = stringBuilder.replace(3, 7, "****").toString();
clueDto.setNid(strRep);
} else {
// 查看任务是否需要加密显示资源
if ("null".equals(str) || StringUtils.isBlank(str)) {
ClueDto clueDtoClient = new ClueDto();
clueDtoClient.setTaskId(taskId.longValue());
clueDtoClient.setIsRedis(1);
Map<String, List<String>> body;
try {
body = organizeClient.getLabel(clueDtoClient).getBody();
} catch (Exception e) {
log.error("Method【getTradeInfo】An error occurred ,error:{},time:{}", e.getMessage(), DateUtil.now());
throw new BadRequestException("获取加密信息错误");
}
if (body != null && body.containsKey("taskIsEncryption")) {
str = body.get("taskIsEncryption").get(0);
}
}
//str此次任务是否加密线索手机号 0:不加密 1:加密
if ("0".equals(str)) {
clueDto.setNid(nid);
} else {
StringBuilder stringBuilder = new StringBuilder(nid);
String strRep = stringBuilder.replace(3, 7, "****").toString();
clueDto.setNid(strRep);
}
}
}
}

@ -192,6 +192,9 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
@Query(value = "select * from tb_clue_middle d where d.clue_stage_time >= ?1 and d.clue_stage_time< ?2 and d.member_id in ?3", nativeQuery = true)
List<ClueMiddle> queryAllByTimeAndMemberIds(String beginTime, String endTime, List<Long> memberIds);
@Query(value = "select * from tb_clue_middle d where d.clue_stage_time >= ?1 and d.clue_stage_time< ?2 and d.member_id = ?3", nativeQuery = true)
List<ClueMiddle> queryAllByTimeAndMemberId(String beginTime, String endTime, Long memberId);
@Query(value = "select * from tb_clue_middle d where d.clue_stage_time >= ?1 and d.clue_stage_time< ?2 and d.organize_id in ?3", nativeQuery = true)
List<ClueMiddle> queryAllByTimeAndorganizeIds(String beginTime, String endTime, List<Long> organizeIds);
@ -217,7 +220,7 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
* @param userId
* @return
*/
@Query(value = " select * from tb_clue_middle as tcm left join tb_clue as tc on tcm.clue_id =tc.id" +
@Query(value = " select tcm.* from tb_clue_middle as tcm left join tb_clue as tc on tcm.clue_id =tc.id" +
" where tc.create_by = ?1", nativeQuery = true)
List<ClueMiddle> findClueMiddleByCreateBy(Long userId);
}

@ -232,6 +232,13 @@ public interface ClueService {
*/
CommonResponse<Object> reportClueStageAndTurnover(ReportStageAndTurnoverDto reportStageAndTurnoverDto);
/**
*
*
* @param reportStageAndTurnoverDto
* @return
*/
CommonResponse<Object> reportFunnel(ReportStageAndTurnoverDto reportStageAndTurnoverDto);
/**
* 线

@ -3,6 +3,7 @@ package com.baiye.module.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
@ -199,7 +200,6 @@ public class ClueServiceImpl implements ClueService {
List<Long> userIds = organizeClient.findOrganizeIdByMember(clueQueryCriteria.getMemberId()).getBody();
//如果查询的小组id不为空 ,说明是组长并有权限查看组员信息
if (CollUtil.isNotEmpty(userIds)) {
// clueQueryCriteria.setOrganizeId(organizeId);
clueQueryCriteria.setUserIdList(userIds);
clueQueryCriteria.setMemberId(null);
}
@ -614,14 +614,14 @@ public class ClueServiceImpl implements ClueService {
@Override
public Integer queryClueByAdmin(Long memberId) {
//有意向的阶段 3已加微信 4:高意向 5:邀约中 6到场
List<Integer> stages = Arrays.asList(ClueStageEnum.EFFICIENT.getKey(),ClueStageEnum.ADD_WECHAT.getKey(), ClueStageEnum.INTENTION.getKey(), ClueStageEnum.INVITING.getKey(), ClueStageEnum.INTERVIEW.getKey());
List<Integer> stages = Arrays.asList(ClueStageEnum.EFFICIENT.getKey(), ClueStageEnum.ADD_WECHAT.getKey(), ClueStageEnum.INTENTION.getKey(), ClueStageEnum.INVITING.getKey(), ClueStageEnum.INTERVIEW.getKey());
return clueMiddleRepository.queryClueByAdmin(memberId, DateUtil.today(), stages);
}
@Override
public Integer countClueByTaskId(Long taskId, String beginTime, String endTime) {
//有意向的阶段 3已加微信 4:高意向 5:邀约中 6到场
List<Integer> stages = Arrays.asList(ClueStageEnum.EFFICIENT.getKey(),ClueStageEnum.ADD_WECHAT.getKey(), ClueStageEnum.INTENTION.getKey(), ClueStageEnum.INVITING.getKey(), ClueStageEnum.INTERVIEW.getKey());
List<Integer> stages = Arrays.asList(ClueStageEnum.EFFICIENT.getKey(), ClueStageEnum.ADD_WECHAT.getKey(), ClueStageEnum.INTENTION.getKey(), ClueStageEnum.INVITING.getKey(), ClueStageEnum.INTERVIEW.getKey());
return clueMiddleRepository.countClueByTaskId(taskId, beginTime, endTime, stages);
}
@ -636,6 +636,7 @@ public class ClueServiceImpl implements ClueService {
if (dynamicTaskDto.getWhichUserId() == null) {
throw new BadRequestException("添加失败");
}
dynamicTaskDto.setUserId(dynamicTaskDto.getWhichUserId());
TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria();
taskQueryCriteria.setCreateBy(dynamicTaskDto.getWhichUserId());
taskQueryCriteria.setIsForm(2);
@ -714,6 +715,55 @@ public class ClueServiceImpl implements ClueService {
return CommonResponse.createBySuccess(list);
}
@Override
public CommonResponse<Object> reportFunnel(ReportStageAndTurnoverDto reportDto) {
if (ObjectUtil.isNull(reportDto) || reportDto.getMemberId() == null) {
return CommonResponse.createByErrorMessage("查询人员为空");
}
String startTime = reportDto.getStartTime();
String endTime = reportDto.getEndTime();
List<ClueMiddle> clueMiddles;
if (StrUtil.isBlank(reportDto.getStartTime()) || StrUtil.isBlank(reportDto.getEndTime())) {
// startTime = DateUtil.beginOfDay(DateUtil.date()).toString();
// endTime = DateUtil.date().toString();
clueMiddles = clueMiddleRepository.findByMemberId(reportDto.getMemberId());
} else {
clueMiddles = clueMiddleRepository.queryAllByTimeAndMemberId(startTime, endTime, reportDto.getMemberId());
}
HashMap<String, Object> reportMap = getReportMap(clueMiddles);
// List<Integer> stages = Arrays.asList(ClueStageEnum.EFFICIENT.getKey(), ClueStageEnum.ADD_WECHAT.getKey(), ClueStageEnum.INTENTION.getKey(), ClueStageEnum.INVITING.getKey(), ClueStageEnum.INTERVIEW.getKey());
// double dealRate = 0.00;
// double communicatRate = 0.00;
// double intentionRate = 0.00;
// if (CollUtil.isNotEmpty(clueMiddles)) {
// //无意向
// int noIntention = (int) reportMap.get(ClueStageEnum.NO_INTENTION.getValue());
// int size = clueMiddles.size() - noIntention;
// //成交
// int deal = (int) reportMap.get(ClueStageEnum.DEAL.getValue());
// dealRate = NumberUtil.div(deal, size, 2);
//
// //待跟进
// int communicat = (int) reportMap.get(ClueStageEnum.NEW_CLUE.getValue()) + (int) reportMap.get(ClueStageEnum.COMMUNICAT.getValue());
// communicatRate = NumberUtil.div(communicat, size, 2);
//
// //有意向
// int i = (int) reportMap.get(ClueStageEnum.EFFICIENT.getValue());
// int i1 = (int) reportMap.get(ClueStageEnum.ADD_WECHAT.getValue());
// int i2 = (int) reportMap.get(ClueStageEnum.INTENTION.getValue());
// int i3 = (int) reportMap.get(ClueStageEnum.INVITING.getValue());
// int i4 = (int) reportMap.get(ClueStageEnum.INTERVIEW.getValue());
// int intention = i + i1 + i2 + i3 + i4;
// intentionRate = NumberUtil.div(intention, size, 2);
//
// }
// reportMap.put("dealRate", dealRate);
// reportMap.put("communicatRate", communicatRate);
// reportMap.put("intentionRate", intentionRate);
return CommonResponse.createBySuccess(reportMap);
}
@Override
public Map<Long, Integer> countClueByMemberStatus(ClueQueryCriteria clueQueryCriteria) {

Loading…
Cancel
Save