123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 |
- package com.huike.report.service.impl;
- import java.math.BigDecimal;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.concurrent.CompletableFuture;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- import com.baomidou.mybatisplus.extension.api.R;
- import com.huike.clues.utils.JobUtils;
- import com.huike.common.utils.StringUtils;
- import com.huike.report.domain.vo.*;
- import lombok.SneakyThrows;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.huike.business.mapper.TbBusinessMapper;
- import com.huike.clues.domain.TbActivity;
- import com.huike.clues.domain.TbAssignRecord;
- import com.huike.clues.domain.TbClue;
- import com.huike.clues.domain.vo.IndexStatisticsVo;
- import com.huike.clues.mapper.SysDeptMapper;
- import com.huike.clues.mapper.SysDictDataMapper;
- import com.huike.clues.mapper.TbActivityMapper;
- import com.huike.clues.mapper.TbAssignRecordMapper;
- import com.huike.clues.mapper.TbClueMapper;
- import com.huike.common.core.domain.entity.SysDept;
- import com.huike.common.utils.SecurityUtils;
- import com.huike.contract.domain.TbContract;
- import com.huike.contract.mapper.TbContractMapper;
- import com.huike.report.mapper.ReportMapper;
- import com.huike.report.service.IReportService;
- @Service
- public class ReportServiceImpl implements IReportService {
- @Autowired
- private TbContractMapper contractMapper;
- @Autowired
- private SysDictDataMapper sysDictDataMapper;
- @Autowired
- private TbClueMapper clueMapper;
- @Autowired
- private TbActivityMapper activityMapper;
- @Autowired
- private TbBusinessMapper businessMapper;
- @Autowired
- private SysDeptMapper deptMapper;
- @Autowired
- private TbAssignRecordMapper assignRecordMapper;
- @Autowired
- private ReportMapper reportMpper;
- @Override
- public LineChartVO contractStatistics(String beginCreateTime, String endCreateTime) {
- LineChartVO lineChartVo =new LineChartVO();
- try {
- List<String> timeList= findDates(beginCreateTime,endCreateTime);
- lineChartVo.setxAxis(timeList);
- List<LineSeriesVO> series = new ArrayList<>();
- List<Map<String,Object>> statistics = contractMapper.contractStatistics(beginCreateTime,endCreateTime);
- LineSeriesVO lineSeriesDTO1=new LineSeriesVO();
- lineSeriesDTO1.setName("新增客户数");
- LineSeriesVO lineSeriesDTO2=new LineSeriesVO();
- lineSeriesDTO2.setName("客户总数");
- int sum = 0;
- for (String s : timeList) {
- Optional optional= statistics.stream().filter(d->d.get("dd").equals(s)).findFirst();
- if(optional.isPresent()){
- Map<String,Object> cuurentData= (Map<String,Object>)optional.get();
- lineSeriesDTO1.getData().add(cuurentData.get("num"));
- sum += Integer.parseInt(cuurentData.get("num").toString());
- }else{
- lineSeriesDTO1.getData().add(0);
- }
- lineSeriesDTO2.getData().add(sum);
- }
- series.add(lineSeriesDTO1);
- series.add(lineSeriesDTO2);
- lineChartVo.setSeries(series);
- } catch (ParseException e) {
- // e.printStackTrace();
- }
- return lineChartVo;
- }
- @Override
- public LineChartVO salesStatistics(String beginCreateTime, String endCreateTime) {
- LineChartVO lineChartVo =new LineChartVO();
- try {
- List<String> timeList= findDates(beginCreateTime,endCreateTime);
- lineChartVo.setxAxis(timeList);
- List<LineSeriesVO> series = new ArrayList<>();
- List<Map<String,Object>> statistics = contractMapper.salesStatistics(beginCreateTime,endCreateTime);
- LineSeriesVO lineSeriesVo=new LineSeriesVO();
- lineSeriesVo.setName("销售统计");
- int sum=0;
- for (String s : timeList) {
- Optional optional= statistics.stream().filter(d->d.get("dd").equals(s)).findFirst();
- if(optional.isPresent()){
- Map<String,Object> cuurentData= (Map<String,Object>)optional.get();
- lineSeriesVo.getData().add(cuurentData.get("sales"));
- }else{
- lineSeriesVo.getData().add(0);
- }
- }
- series.add(lineSeriesVo);
- lineChartVo.setSeries(series);
- } catch (ParseException e) {
- // e.printStackTrace();
- }
- return lineChartVo;
- }
- /**
- * 渠道统计
- */
- @Override
- public List<Map<String, Object>> chanelStatistics(String beginCreateTime, String endCreateTime) {
- List<Map<String, Object>> data= contractMapper.chanelStatistics(beginCreateTime,endCreateTime);
- for (Map<String, Object> datum : data) {
- String subjectValue= (String) datum.get("channel");
- String lable= sysDictDataMapper.selectDictLabel("clues_item",subjectValue);
- datum.put("channel",lable);
- }
- return data;
- }
- @Override
- public List<TbContract> contractReportList(TbContract tbContract) {
- return contractMapper.selectTbContractList(tbContract);
- }
- @Override
- public List<Map<String, Object>> activityStatistics(String beginCreateTime, String endCreateTime) {
- List<Map<String, Object>> data= contractMapper.activityStatistics(beginCreateTime,endCreateTime);
- for (Map<String, Object> datum : data) {
- Long activityId= (Long) datum.get("activity_id");
- TbActivity tbActivity = activityMapper.selectTbActivityById(activityId);
- if(tbActivity==null){
- datum.put("activity", "其他");
- }else{
- datum.put("activity", tbActivity.getName());
- }
- }
- return data;
- }
- /**
- * 按照部门统计销售
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @Override
- public List<Map<String, Object>> deptStatisticsList(String beginCreateTime, String endCreateTime) {
- List<Map<String, Object>> data= contractMapper.deptStatistics(beginCreateTime,endCreateTime);
- for (Map<String, Object> datum : data) {
- Long deptId= (Long) datum.get("dept_id");
- if(deptId!=null){
- SysDept dept= deptMapper.selectDeptById(deptId);
- datum.put("deptName", dept.getDeptName());
- }
- }
- return data;
- }
- /**
- * 按照渠道统计销售
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @Override
- public List<Map<String, Object>> channelStatisticsList(String beginCreateTime, String endCreateTime) {
- List<Map<String, Object>> data= contractMapper.channelStatistics(beginCreateTime,endCreateTime);
- for (Map<String, Object> datum : data) {
- String subjectValue= (String) datum.get("channel");
- if(subjectValue!=null){
- String lable= sysDictDataMapper.selectDictLabel("clues_item",subjectValue);
- datum.put("channel",lable);
- }
- }
- return data;
- }
- /**
- * 按照归属人统计销售
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @Override
- public List<Map<String, Object>> ownerShipStatisticsList(String beginCreateTime, String endCreateTime) {
- return contractMapper.ownerShipStatistics(beginCreateTime,endCreateTime);
- }
- @Override
- public List<TbClue> cluesStatisticsList(TbClue clue) {
- return clueMapper.selectTbClueForReport(clue);
- }
- @Override
- public List<ActivityStatisticsVo> activityStatisticsList(TbActivity query) {
- query.setStatus("2");
- List<TbActivity> activities= activityMapper.selectTbActivityList(query);
- Map<String, Object> timeMap = query.getParams();
- List<ActivityStatisticsVo> list=new ArrayList<>();
- for (TbActivity activity : activities) {
- ActivityStatisticsVo dto = new ActivityStatisticsVo();
- BeanUtils.copyProperties(activity, dto);
- TbClue tbClue = new TbClue();
- tbClue.setActivityId(activity.getId());
- tbClue.setChannel(activity.getChannel());
- tbClue.setParams(timeMap);
- Map<String, Object> clueCount = clueMapper.countByActivity(tbClue);
- if (clueCount != null) {
- dto.setCluesNum(Integer.parseInt(clueCount.get("total").toString()));
- if(clueCount.get("falseClues")!=null){
- dto.setFalseCluesNum(Integer.parseInt(clueCount.get("falseClues").toString()));
- }
- if (clueCount.get("toBusiness") != null) {
- dto.setBusinessNum(Integer.parseInt(clueCount.get("toBusiness").toString()));
- }
- }
- TbContract tbContract = new TbContract();
- tbContract.setChannel(activity.getChannel());
- tbContract.setActivityId(activity.getId());
- tbContract.setParams(timeMap);
- Map<String, Object> contractCount = contractMapper.countByActivity(tbContract);
- if (contractCount != null) {
- dto.setCustomersNum(Integer.parseInt(contractCount.get("customersNum").toString()));
- if(contractCount.get("amount")==null) {
- dto.setAmount(0d);
- }else {
- dto.setAmount((Double) contractCount.get("amount"));
- }
- if(contractCount.get("cost")==null) {
- dto.setCost(0d);
- }else {
- dto.setCost((Double) contractCount.get("cost"));
- }
- }
- list.add(dto);
- }
- return list;
- }
- /**
- * *************看我看我**************
- * 传入两个时间范围,返回这两个时间范围内的所有时间,并保存在一个集合中
- * @param beginTime
- * @param endTime
- * @return
- * @throws ParseException
- */
- public static List<String> findDates(String beginTime, String endTime)
- throws ParseException {
- List<String> allDate = new ArrayList();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Date dBegin = sdf.parse(beginTime);
- Date dEnd = sdf.parse(endTime);
- allDate.add(sdf.format(dBegin));
- Calendar calBegin = Calendar.getInstance();
- // 使用给定的 Date 设置此 Calendar 的时间
- calBegin.setTime(dBegin);
- Calendar calEnd = Calendar.getInstance();
- // 使用给定的 Date 设置此 Calendar 的时间
- calEnd.setTime(dEnd);
- // 测试此日期是否在指定日期之后
- while (dEnd.after(calBegin.getTime())) {
- // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
- calBegin.add(Calendar.DAY_OF_MONTH, 1);
- allDate.add(sdf.format(calBegin.getTime()));
- }
- System.out.println("时间==" + allDate);
- return allDate;
- }
- @Override
- public IndexVo getIndex(IndexStatisticsVo request) {
- Long deptId= request.getDeptId();
- TbAssignRecord tbAssignRecord=new TbAssignRecord();
- tbAssignRecord.setLatest("1");
- assignRecordMapper.selectAssignRecordList(tbAssignRecord);
- return null;
- }
- @Override
- public List<Map<String, Object>> salesStatisticsForIndex(IndexStatisticsVo request) {
- List<Map<String, Object>> list= contractMapper.contractStatisticsByUser(request);
- for (Map<String, Object> datum : list) {
- Long deptId= (Long) datum.get("dept_id");
- if(deptId!=null){
- SysDept dept= deptMapper.selectDeptById(deptId);
- datum.put("deptName", dept.getDeptName());
- }
- }
- return list;
- }
- /**
- * ************看我看我***********
- * 用我能少走很多路
- * 我是用来机选百分比的方法
- * @param all
- * @param num
- * @return
- */
- private BigDecimal getRadio(Integer all,Long num) {
- if(all.intValue()==0){
- return new BigDecimal(0);
- }
- BigDecimal numBigDecimal = new BigDecimal(num);
- BigDecimal allBigDecimal = new BigDecimal(all);
- BigDecimal divide = numBigDecimal.divide(allBigDecimal,4,BigDecimal.ROUND_HALF_UP);
- return divide.multiply(new BigDecimal(100));
- }
- /**
- * 获取首页基本数据
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @Override
- public IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime) {
- //1)构建一个空的结果集对象
- IndexBaseInfoVO result = new IndexBaseInfoVO();
- //2 封装结果集属性
- // 2.1 由于查询需要用到用户名 调用工具类获取用户名
- String username = SecurityUtils.getUsername();
- try {
- //3 封装结果集对象
- result.setCluesNum(reportMpper.getCluesNum(beginCreateTime, endCreateTime, username));
- result.setBusinessNum(reportMpper.getBusinessNum(beginCreateTime, endCreateTime, username));
- result.setContractNum(reportMpper.getContractNum(beginCreateTime, endCreateTime, username));
- result.setSalesAmount(reportMpper.getSalesAmount(beginCreateTime, endCreateTime, username));
- }catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- //4 返回结果集对象
- return result;
- }
- /**
- * 今日简报
- * @return
- */
- @Override
- public Map<String, Object> getTodayInfo() {
- IndexVo indexVo = new IndexVo();
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(new Date());
- calendar.set(Calendar.HOUR_OF_DAY, 0);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- Date start = calendar.getTime();
- calendar.add(Calendar.DAY_OF_MONTH, 1);
- calendar.add(Calendar.SECOND, -1);
- Date end = calendar.getTime();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String start1 = sdf.format(start);
- String end1 = sdf.format(end);
- Map<String, Object> map = new HashMap<>();
- String username = SecurityUtils.getUsername();
- map.put("todayCluesNum",reportMpper.getTodayCluesNum(start1,end1,username));
- map.put("todayBusinessNum",reportMpper.getTodayBusinessNum(start1,end1,username));
- map.put("todayContractNum",reportMpper.getTodayContractNum(start1,end1,username));
- map.put("todaySalesAmount",reportMpper.getTodaySalesAmount(start1,end1,username));
- return map;
- }
- /**
- * 特办事项
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @Override
- public Map<String, Object> getTodoInfo(String beginCreateTime, String endCreateTime) {
- String username = SecurityUtils.getUsername();
- Map<String, Object> map = new HashMap<>();
- map.put("tofollowedCluesNum",reportMpper.getTofollowedCluesNum(beginCreateTime,endCreateTime,username));
- map.put("tofollowedBusinessNum",reportMpper.getTofollowedBusinessNum(beginCreateTime,endCreateTime,username));
- map.put("toallocatedCluesNum",reportMpper.getToallocatedCluesNum(beginCreateTime,endCreateTime,username));
- map.put("toallocatedBusinessNum",reportMpper.getToallocatedBusinessNum(beginCreateTime,endCreateTime,username));
- return map;
- }
- /**
- * 饼图
- * @param beginCreateTime
- * @param endCreateTime
- */
- @Override
- public List<Map<String,Object>> subjectStatistics(String beginCreateTime, String endCreateTime) {
- return reportMpper.subjectStatistics(beginCreateTime,endCreateTime);
- }
- /**
- * 折线图
- * @param beginCreateTime
- * @param endCreateTime
- * @return
- */
- @SneakyThrows
- @Override
- public LineChartVO cluesStatistics(String beginCreateTime, String endCreateTime) {
- List<String> dates = ReportServiceImpl.findDates(beginCreateTime, endCreateTime);
- LineChartVO lineChartVO = new LineChartVO();
- lineChartVO.setxAxis(dates);
- List<Map<String, Object>> list = reportMpper.cluesStatistics(beginCreateTime, endCreateTime);
- ArrayList<LineSeriesVO> lt = new ArrayList<>();
- LineSeriesVO lineSeriesVO1 = new LineSeriesVO();
- LineSeriesVO lineSeriesVO2 = new LineSeriesVO();
- lineSeriesVO1.setName("新增线索数量");
- lineSeriesVO2.setName("线索总数量");
- List<Object> list1 = new ArrayList<>();
- List<Object> list2 = new ArrayList<>();
- int sum=0;
- for (int i = 0; i < list.size(); i++) {
- for (int j = 0; j < dates.size(); j++) {
- if (dates.get(j).equals(list.get(i).get("t"))){
- list1.add(list.get(i).get("n"));
- sum+=Integer.parseInt(list.get(i).get("n").toString());
- }else {
- list1.add(0);
- }
- list2.add(sum);
- }
- }
- lineSeriesVO1.setData(list1);
- lineSeriesVO2.setData(list2);
- lt.add(lineSeriesVO1);
- lt.add(lineSeriesVO2);
- lineChartVO.setSeries(lt);
- return lineChartVO;
- }
- }
|