修改投流显示

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,6 +215,10 @@ public class ClueJpa {
String nid = AESUtils.decrypt(phone, secret);
String key = "task:encryption:" + taskId;
String str = String.valueOf(redisUtils.get(key));
//fixme 投流线索 返回处理
if (clueType == 4) {
clueDto.setNid(RandomUtil.randomString(22));
} else {
// 查看资源是否需要加密显示
if (isEncryption != null && isEncryption == 1) {
StringBuilder stringBuilder = new StringBuilder(nid);
@ -246,6 +251,7 @@ public class ClueJpa {
}
}
}
}
clueDto.setWx((String) row.get("wx"));
clueDto.setAddress((String) row.get("address"));
clueDto.setRemark((String) row.get("remark"));

@ -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);
}
@ -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