添加elastic-job
parent
99649611c1
commit
598777b8b0
@ -1,4 +0,0 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.baiye.ballcat.common.job.XxlJobAutoConfiguration
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
com.baiye.ballcat.common.job.XxlJobAutoConfiguration
|
@ -0,0 +1,34 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baiye.modules.distribute.service.DistributeReportService;
|
||||
import com.dangdang.ddframe.job.api.ShardingContext;
|
||||
import com.dangdang.ddframe.job.api.simple.SimpleJob;
|
||||
import com.example.jobInstance.ElasticSimpleJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/14
|
||||
* 导入分配统计
|
||||
* 0/5 * * * * ?
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@ElasticSimpleJob(
|
||||
jobName = "DistributeRecordReportJob", cron = "0 30 23 * * ?")
|
||||
public class DistributeRecordReportJob implements SimpleJob {
|
||||
|
||||
@Resource
|
||||
private DistributeReportService distributeReportService;
|
||||
|
||||
@Override
|
||||
public void execute(ShardingContext shardingContext) {
|
||||
log.info("流量分布定时任务开始-----{}", DateUtil.date());
|
||||
distributeReportService.distributeReport();
|
||||
log.info("流量分布定时任务结束-----{}", DateUtil.date());
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.service.DistributeReportService;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "分配信息统计")
|
||||
@RequestMapping("/report")
|
||||
public class DistributeReportController {
|
||||
private final DistributeReportService distributeReportService;
|
||||
|
||||
@GetMapping("/report")
|
||||
public void distributeReport() {
|
||||
distributeReportService.distributeReport();
|
||||
}
|
||||
|
||||
@GetMapping("/flow")
|
||||
@Operation(summary = "流量分布统计")
|
||||
public R<Object> reportFlow(@RequestParam(value = "userId", required = false) Long userId,
|
||||
@RequestParam(value = "channel", required = false) String channel,
|
||||
@RequestParam(value = "type", required = true) Integer type
|
||||
) {
|
||||
return R.ok(distributeReportService.reportFlow(userId, channel, type));
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report_channel")
|
||||
@Schema(title = "导入线索分配统计-渠道")
|
||||
public class DistributeReportChannelEntity implements Serializable {
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "渠道")
|
||||
private String channel;
|
||||
|
||||
@Schema(title = "当日量")
|
||||
private Integer todayNum=0;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer totalNum=0;
|
||||
|
||||
@Schema(title = "分配量")
|
||||
private Integer distributeNum=0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportChannelEntity createDistributeReportChannel(Long userId, String username, String channel, Integer todayNum, Integer totalNum, Integer distributeNum, Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setChannel(channel);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setTotalNum(totalNum);
|
||||
this.setDistributeNum(distributeNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report")
|
||||
@Schema(title = "导入线索分配统计")
|
||||
public class DistributeReportEntity implements Serializable {
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "渠道")
|
||||
private String channel;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer todayNum = 0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportEntity createDistributeReport(Long userId, String username, String channel, Integer todayNum, Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setChannel(channel);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report_user")
|
||||
@Schema(title = "导入线索分配统计-用户")
|
||||
public class DistributeReportUserEntity implements Serializable {
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "当日量")
|
||||
private Integer todayNum=0;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer totalNum=0;
|
||||
|
||||
@Schema(title = "分配量")
|
||||
private Integer distributeNum=0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportUserEntity createDistributeReportUser(Long userId, String username, Integer todayNum, Integer totalNum, Integer distributeNum, Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setTotalNum(totalNum);
|
||||
this.setDistributeNum(distributeNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.baiye.modules.distribute.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportChannelEntity;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
public interface DistributeReportChannelMapper extends ExtendMapper<DistributeReportChannelEntity> {
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.baiye.modules.distribute.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportEntity;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
public interface DistributeReportMapper extends ExtendMapper<DistributeReportEntity> {
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.baiye.modules.distribute.mapper;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportUserEntity;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
public interface DistributeReportUserMapper extends ExtendMapper<DistributeReportUserEntity> {
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.baiye.modules.distribute.service;
|
||||
|
||||
import com.baiye.extend.mybatis.plus.service.ExtendService;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportEntity;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
public interface DistributeReportService extends ExtendService<DistributeReportEntity> {
|
||||
|
||||
/**
|
||||
* 流量分布查询
|
||||
*/
|
||||
Map<String, Object> reportFlow(Long userId, String channel, Integer type);
|
||||
|
||||
/**
|
||||
* 线索定时统计
|
||||
*/
|
||||
void distributeReport();
|
||||
}
|
@ -0,0 +1,303 @@
|
||||
package com.baiye.modules.distribute.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.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baiye.exception.BadRequestException;
|
||||
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
|
||||
import com.baiye.modules.distribute.entity.ClueRecordEntity;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportChannelEntity;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportEntity;
|
||||
import com.baiye.modules.distribute.entity.DistributeReportUserEntity;
|
||||
import com.baiye.modules.distribute.mapper.DistributeReportChannelMapper;
|
||||
import com.baiye.modules.distribute.mapper.DistributeReportMapper;
|
||||
import com.baiye.modules.distribute.mapper.DistributeReportUserMapper;
|
||||
import com.baiye.modules.distribute.service.ClueRecordService;
|
||||
import com.baiye.modules.distribute.service.DistributeReportService;
|
||||
import com.baiye.modules.distribute.vo.ReportFlowVO;
|
||||
import com.baiye.system.model.entity.SysUser;
|
||||
import com.baiye.system.service.SysUserService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DistributeReportServiceImpl extends ExtendServiceImpl<DistributeReportMapper, DistributeReportEntity> implements DistributeReportService {
|
||||
|
||||
private final ClueRecordService clueRecordService;
|
||||
|
||||
private final DistributeReportChannelMapper distributeReportChannelMapper;
|
||||
|
||||
private final DistributeReportUserMapper distributeReportUserMapper;
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> reportFlow(Long userId, String channel, Integer type) {
|
||||
|
||||
Map<String, Object> map = getHomeReport(type, userId);
|
||||
|
||||
List<ReportFlowVO> reportFlowList = new ArrayList<>();
|
||||
if (userId != null) {
|
||||
if (StrUtil.isNotBlank(channel)) {
|
||||
//查询近7天
|
||||
Date date = DateUtil.offsetDay(DateUtil.yesterday(), -6);
|
||||
Date beginTime = DateUtil.beginOfDay(date);
|
||||
Date endTime = DateUtil.endOfDay(DateUtil.yesterday());
|
||||
LambdaQueryWrapper<DistributeReportEntity> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.between(DistributeReportEntity::getCreateTime, beginTime, endTime);
|
||||
wrapper.eq(DistributeReportEntity::getUserId, userId);
|
||||
wrapper.eq(DistributeReportEntity::getChannel, channel);
|
||||
List<DistributeReportEntity> distributeReportEntityList = baseMapper.selectList(wrapper);
|
||||
if (CollUtil.isEmpty(distributeReportEntityList)) {
|
||||
return map;
|
||||
}
|
||||
reportFlowList = getReportFlowList(distributeReportEntityList, beginTime, endTime);
|
||||
map.put("type", 3);
|
||||
map.put("data", reportFlowList);
|
||||
return map;
|
||||
}
|
||||
map.put("type", 2);
|
||||
LambdaQueryWrapper<DistributeReportChannelEntity> wrapperChannel = new LambdaQueryWrapper<>();
|
||||
wrapperChannel.eq(DistributeReportChannelEntity::getUserId, userId);
|
||||
List<DistributeReportChannelEntity> channelList = distributeReportChannelMapper.selectList(wrapperChannel);
|
||||
|
||||
for (DistributeReportChannelEntity channelEntity : channelList) {
|
||||
ReportFlowVO reportFlowVO = new ReportFlowVO();
|
||||
reportFlowVO.setName(channelEntity.getChannel());
|
||||
reportFlowVO.setRatio(channelEntity.getRatio());
|
||||
reportFlowVO.setRatioDay(channelEntity.getRatioDay());
|
||||
reportFlowVO.setTotalNum(channelEntity.getTotalNum());
|
||||
reportFlowList.add(reportFlowVO);
|
||||
}
|
||||
map.put("data", reportFlowList);
|
||||
} else {
|
||||
List<DistributeReportUserEntity> distributeReportUserList = distributeReportUserMapper.selectList(null);
|
||||
for (DistributeReportUserEntity distributeReportUserEntity : distributeReportUserList) {
|
||||
ReportFlowVO reportFlowVO = new ReportFlowVO();
|
||||
reportFlowVO.setName(distributeReportUserEntity.getUsername());
|
||||
reportFlowVO.setRatio(distributeReportUserEntity.getRatio());
|
||||
reportFlowVO.setRatioDay(distributeReportUserEntity.getRatioDay());
|
||||
reportFlowVO.setTotalNum(distributeReportUserEntity.getTotalNum());
|
||||
reportFlowList.add(reportFlowVO);
|
||||
}
|
||||
map.put("data", reportFlowList);
|
||||
map.put("type", 1);
|
||||
return map;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取昨日导入和分配数
|
||||
*/
|
||||
private Map<String, Object> getHomeReport(Integer type, Long userId) {
|
||||
Map<String, Object> map = new HashMap<>(8);
|
||||
LambdaQueryWrapper<DistributeReportUserEntity> wrapperUser = new LambdaQueryWrapper<>();
|
||||
DateTime dateTime = DateUtil.beginOfDay(DateUtil.yesterday());
|
||||
DateTime dateTime1 = DateUtil.endOfDay(DateUtil.yesterday());
|
||||
wrapperUser.between(DistributeReportUserEntity::getCreateTime, dateTime, dateTime1);
|
||||
int yesterdayImportNum = 0;
|
||||
int yesterdayDistributeNum = 0;
|
||||
if (type == 1) {
|
||||
List<DistributeReportUserEntity> distributeReportUserList = distributeReportUserMapper.selectList(wrapperUser);
|
||||
if (CollUtil.isNotEmpty(distributeReportUserList)) {
|
||||
for (DistributeReportUserEntity distributeReportUserEntity : distributeReportUserList) {
|
||||
yesterdayImportNum += distributeReportUserEntity.getTodayNum();
|
||||
yesterdayDistributeNum += distributeReportUserEntity.getDistributeNum();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (userId == null) {
|
||||
throw new BadRequestException("参数异常");
|
||||
}
|
||||
wrapperUser.eq(DistributeReportUserEntity::getUserId, userId);
|
||||
DistributeReportUserEntity distributeReportUserEntity = distributeReportUserMapper.selectOne(wrapperUser);
|
||||
|
||||
if (distributeReportUserEntity != null) {
|
||||
yesterdayImportNum = distributeReportUserEntity.getTodayNum();
|
||||
yesterdayDistributeNum = distributeReportUserEntity.getDistributeNum();
|
||||
}
|
||||
}
|
||||
map.put("yesterdayImportNum", yesterdayImportNum);
|
||||
map.put("yesterdayDistributeNum", yesterdayDistributeNum);
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void distributeReport() {
|
||||
|
||||
LambdaQueryWrapper<ClueRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.between(ClueRecordEntity::getCreateTime, DateUtil.beginOfDay(DateUtil.date()), DateUtil.endOfDay(DateUtil.date()));
|
||||
wrapper.eq(ClueRecordEntity::getStatus, 2);
|
||||
List<ClueRecordEntity> allRecordInTodayList = clueRecordService.selectByWrapper(wrapper);
|
||||
if (CollUtil.isEmpty(allRecordInTodayList)) {
|
||||
return;
|
||||
}
|
||||
//提取所有用户
|
||||
Set<Long> collect = allRecordInTodayList.stream().map(ClueRecordEntity::getCreateBy).collect(Collectors.toSet());
|
||||
Map<Long, String> userNameList = getUserName(collect);
|
||||
|
||||
//1.按公司分组
|
||||
Map<Long, List<ClueRecordEntity>> recordByUserMap = allRecordInTodayList.stream().collect(
|
||||
Collectors.groupingBy(ClueRecordEntity::getCreateBy));
|
||||
if (ObjectUtil.isEmpty(recordByUserMap)) {
|
||||
return;
|
||||
}
|
||||
List<DistributeReportUserEntity> distributeReportUserList = new ArrayList<>();
|
||||
//之前的总量
|
||||
Long historyTotal = distributeReportUserMapper.selectCount(new LambdaQueryWrapper<DistributeReportUserEntity>().select(DistributeReportUserEntity::getTotalNum));
|
||||
int sum = allRecordInTodayList.stream().mapToInt(ClueRecordEntity::getSuccessNum).sum();
|
||||
int totalAll = historyTotal.intValue() + sum;
|
||||
//记录之前得统计id
|
||||
List<Long> ids = new ArrayList<>();
|
||||
for (Map.Entry<Long, List<ClueRecordEntity>> entry : recordByUserMap.entrySet()) {
|
||||
Long userId = entry.getKey();
|
||||
List<ClueRecordEntity> clueRecordByUserList = entry.getValue();
|
||||
//今日新增数
|
||||
int sumByUser = clueRecordByUserList.stream().mapToInt(ClueRecordEntity::getSuccessNum).sum();
|
||||
//上次对象
|
||||
DistributeReportUserEntity distributeReportUserByYesterday = distributeReportUserMapper.selectOne(new LambdaQueryWrapper<DistributeReportUserEntity>()
|
||||
.eq(DistributeReportUserEntity::getUserId, userId)
|
||||
);
|
||||
int yesterdayNum = 0;
|
||||
int yesterdayTotalNum = 0;
|
||||
if (distributeReportUserByYesterday != null) {
|
||||
//上次新增数
|
||||
if (DateUtil.betweenDay(distributeReportUserByYesterday.getCreateTime(), DateUtil.yesterday(), true) == 0) {
|
||||
|
||||
yesterdayNum = distributeReportUserByYesterday.getTodayNum();
|
||||
}
|
||||
yesterdayTotalNum = distributeReportUserByYesterday.getTotalNum();
|
||||
ids.add(distributeReportUserByYesterday.getId());
|
||||
} else {
|
||||
distributeReportUserByYesterday = new DistributeReportUserEntity();
|
||||
}
|
||||
//总数
|
||||
int totalNum = yesterdayTotalNum + sumByUser;
|
||||
//分发数
|
||||
int distributeNum = clueRecordByUserList.stream().filter(c -> c.getAllocationStatus() == 1).mapToInt(ClueRecordEntity::getSuccessNum).sum();
|
||||
double ratio;
|
||||
ratio = NumberUtil.div(totalNum, totalAll);
|
||||
double ratioDay = 0.0;
|
||||
if (yesterdayNum > 0) {
|
||||
ratioDay = NumberUtil.div(NumberUtil.min(sumByUser, yesterdayNum), yesterdayNum);
|
||||
}
|
||||
String userName = userNameList.get(userId) == null ? "" : userNameList.get(userId);
|
||||
distributeReportUserByYesterday.createDistributeReportUser(userId, userName, sumByUser, totalNum, distributeNum, ratio, ratioDay);
|
||||
distributeReportUserList.add(distributeReportUserByYesterday);
|
||||
|
||||
//按渠道统计
|
||||
dealByChannel(clueRecordByUserList, userId, totalNum, userName);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(ids)) {
|
||||
distributeReportUserMapper.deleteBatchIds(ids);
|
||||
}
|
||||
distributeReportUserMapper.insertBatchSomeColumn(distributeReportUserList);
|
||||
}
|
||||
|
||||
|
||||
private void dealByChannel(List<ClueRecordEntity> clueRecordByUserList, Long userId, Integer totalNumByUser, String userName) {
|
||||
List<DistributeReportChannelEntity> list = new ArrayList<>();
|
||||
List<DistributeReportEntity> distributeReportEntityList = new ArrayList<>();
|
||||
//.按渠道分组
|
||||
Map<String, List<ClueRecordEntity>> recordByChannelMap = clueRecordByUserList.stream().filter(c -> StrUtil.isNotBlank(c.getChannelIdentifying())).collect(
|
||||
Collectors.groupingBy(ClueRecordEntity::getChannelIdentifying));
|
||||
if (ObjectUtil.isEmpty(recordByChannelMap)) {
|
||||
return;
|
||||
}
|
||||
List<Long> ids = new ArrayList<>();
|
||||
for (Map.Entry<String, List<ClueRecordEntity>> entryByChannel : recordByChannelMap.entrySet()) {
|
||||
String channel = entryByChannel.getKey();
|
||||
List<ClueRecordEntity> clueRecordByChannel = entryByChannel.getValue();
|
||||
int sumByUser = clueRecordByChannel.stream().mapToInt(ClueRecordEntity::getSuccessNum).sum();
|
||||
//查询昨日信息
|
||||
DistributeReportChannelEntity distributeReportUserByYesterday = distributeReportChannelMapper.selectOne(new LambdaQueryWrapper<DistributeReportChannelEntity>()
|
||||
.eq(DistributeReportChannelEntity::getUserId, userId)
|
||||
.eq(DistributeReportChannelEntity::getChannel, channel)
|
||||
);
|
||||
int yesterdayNum = 0;
|
||||
int yesterdayTotalNum = 0;
|
||||
if (distributeReportUserByYesterday != null) {
|
||||
if (DateUtil.betweenDay(distributeReportUserByYesterday.getCreateTime(), DateUtil.yesterday(), true) == 0) {
|
||||
yesterdayNum = distributeReportUserByYesterday.getTodayNum();
|
||||
}
|
||||
yesterdayTotalNum = distributeReportUserByYesterday.getTotalNum();
|
||||
ids.add(distributeReportUserByYesterday.getId());
|
||||
} else {
|
||||
distributeReportUserByYesterday = new DistributeReportChannelEntity();
|
||||
}
|
||||
int totalNum = yesterdayTotalNum + sumByUser;
|
||||
int distributeNum = clueRecordByChannel.stream().filter(c -> c.getAllocationStatus() == 1).mapToInt(ClueRecordEntity::getSuccessNum).sum();
|
||||
double ratio = NumberUtil.div(totalNum, totalNumByUser.intValue());
|
||||
double ratioDay = 0.0;
|
||||
if (yesterdayNum > 0) {
|
||||
ratioDay = NumberUtil.div(NumberUtil.min(sumByUser, yesterdayNum), yesterdayNum);
|
||||
}
|
||||
|
||||
distributeReportUserByYesterday.createDistributeReportChannel(userId, userName, channel, sumByUser, totalNum, distributeNum, ratio, ratioDay);
|
||||
list.add(distributeReportUserByYesterday);
|
||||
|
||||
DistributeReportEntity distributeReport = new DistributeReportEntity().createDistributeReport(userId, userName, channel, sumByUser, NumberUtil.div(sumByUser, totalNum), ratioDay);
|
||||
distributeReportEntityList.add(distributeReport);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(ids)) {
|
||||
distributeReportChannelMapper.deleteBatchIds(ids);
|
||||
}
|
||||
distributeReportChannelMapper.insertBatchSomeColumn(list);
|
||||
baseMapper.insertBatchSomeColumn(distributeReportEntityList);
|
||||
}
|
||||
|
||||
private List<ReportFlowVO> getReportFlowList(List<DistributeReportEntity> distributeReportEntityList, Date beginTime, Date endTime) {
|
||||
Map<String, DistributeReportEntity> callMap = new HashMap<>(8);
|
||||
for (DistributeReportEntity reportDeduct : distributeReportEntityList) {
|
||||
callMap.put(reportDeduct.getCreateTime().toString(), reportDeduct);
|
||||
}
|
||||
List<ReportFlowVO> list = new ArrayList<>();
|
||||
long betweenDay = DateUtil.between(beginTime, endTime, DateUnit.DAY);
|
||||
for (int i = 0; i <= betweenDay; i++) {
|
||||
String time = DateUtil.format(DateUtil.offsetDay(beginTime, i), "yyyy-MM-dd");
|
||||
ReportFlowVO reportFlowVO = new ReportFlowVO();
|
||||
if (callMap.containsKey(time)) {
|
||||
DistributeReportEntity reportDeduct = callMap.get(time);
|
||||
reportFlowVO.setRatioDay(reportDeduct.getRatioDay());
|
||||
reportFlowVO.setRatio(reportDeduct.getRatio());
|
||||
reportFlowVO.setTotalNum(reportDeduct.getTodayNum());
|
||||
} else {
|
||||
reportFlowVO.setRatioDay(0.0);
|
||||
reportFlowVO.setRatio(0.0);
|
||||
reportFlowVO.setTotalNum(0);
|
||||
}
|
||||
reportFlowVO.setName(time);
|
||||
list.add(reportFlowVO);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public Map<Long, String> getUserName(Set<Long> ids) {
|
||||
List<SysUser> sysUsers = sysUserService.listByUserIds(ids);
|
||||
Map<Long, String> map = new HashMap<>(8);
|
||||
for (SysUser sysUser : sysUsers) {
|
||||
map.put(sysUser.getUserId(), sysUser.getUsername());
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiye.modules.distribute.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/2
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "标签组VO")
|
||||
public class ReportFlowVO {
|
||||
|
||||
@Schema(title = "公司名/渠道/日期")
|
||||
private String name;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer totalNum;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private Double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private Double ratioDay;
|
||||
}
|
Loading…
Reference in New Issue