package com.xzx.gc.system.controller;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.NumberUtil;
|
import com.xzx.gc.common.Result;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.utils.BusinessUtil;
|
import com.xzx.gc.entity.CityPartner;
|
import com.xzx.gc.entity.PlatformReport;
|
import com.xzx.gc.model.MapDto;
|
import com.xzx.gc.model.order.*;
|
import com.xzx.gc.system.service.CityPartnerService;
|
import com.xzx.gc.system.service.PlatformReportService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.List;
|
import java.util.TreeSet;
|
import java.util.stream.Collectors;
|
|
@RestController
|
@Api(tags = {"平台报表管理"})
|
@Validated
|
@Slf4j
|
public class PlatformReportController {
|
|
|
@Autowired
|
private PlatformReportService platformReportService;
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
@PostMapping("/platformReport/find")
|
@ApiOperation(value = "平台总览")
|
public Result<List<PlatformReportDto>> find() {
|
List<PlatformReportDto> list = CollUtil.newArrayList();
|
|
//按时间统计
|
List<PlatformReport> byIndicatorType = platformReportService.findByIndicatorType(OrderEnum.按时间统计.getValue());
|
|
/*
|
用户量
|
*/
|
//按用户量筛选
|
List<PlatformReport> users = byIndicatorType.stream().filter(x -> OrderEnum.用户量.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
double sum = users.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
PlatformReportDto platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(Convert.toStr(Convert.toInt(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(users));
|
//类型
|
platformReportDto.setType(OrderEnum.用户量.getValue());
|
list.add(platformReportDto);
|
|
/*
|
下单量
|
*/
|
List<PlatformReport> orderNums = byIndicatorType.stream().filter(x -> OrderEnum.总下单量.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
sum = orderNums.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(Convert.toStr(Convert.toInt(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(orderNums));
|
//类型
|
platformReportDto.setType(OrderEnum.总下单量.getValue());
|
list.add(platformReportDto);
|
|
/*
|
交易金额
|
*/
|
List<PlatformReport> orderMoneys = byIndicatorType.stream().filter(x -> OrderEnum.总交易金额.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
sum = orderMoneys.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(businessUtil.changeMoney(Convert.toStr(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(orderMoneys));
|
//类型
|
platformReportDto.setType(OrderEnum.总交易金额.getValue());
|
list.add(platformReportDto);
|
|
|
/*
|
打包站回收金额
|
*/
|
List<PlatformReport> dbzMoneys = byIndicatorType.stream().filter(x -> OrderEnum.打包站回收金额.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
sum = dbzMoneys.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(businessUtil.changeMoney(Convert.toStr(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(dbzMoneys));
|
//类型
|
platformReportDto.setType(OrderEnum.打包站回收金额.getValue());
|
list.add(platformReportDto);
|
|
|
/*
|
投诉
|
*/
|
List<PlatformReport> complaints = byIndicatorType.stream().filter(x -> OrderEnum.投诉总量.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
sum = complaints.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(Convert.toStr(Convert.toInt(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(complaints));
|
//类型
|
platformReportDto.setType(OrderEnum.投诉总量.getValue());
|
list.add(platformReportDto);
|
|
/*
|
未提现
|
*/
|
List<PlatformReport> moneys = byIndicatorType.stream().filter(x -> OrderEnum.未提现总额.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
if(CollUtil.isNotEmpty(moneys)) {
|
sum = Convert.toDouble(CollUtil.getFirst(moneys).getIndicator());
|
}else {
|
sum=0;
|
}
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(businessUtil.changeMoney(Convert.toStr(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(moneys));
|
//类型
|
platformReportDto.setType(OrderEnum.未提现总额.getValue());
|
list.add(platformReportDto);
|
|
|
/*
|
已提现
|
*/
|
List<PlatformReport> withdraws = byIndicatorType.stream().filter(x -> OrderEnum.已提现总额.getValue().equals(x.getReportType().toString())).collect(Collectors.toList());
|
//总数
|
sum = withdraws.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
platformReportDto = new PlatformReportDto();
|
platformReportDto.setAllNum(businessUtil.changeMoney(Convert.toStr(sum)));
|
//日环比 日环比计算方法: (本日回收金额/昨日回收金额 — 1 )× 100% 正值为增长率 负值为下降率
|
platformReportDto.setRatio(platformReportService.getRatio(withdraws));
|
//类型
|
platformReportDto.setType(OrderEnum.已提现总额.getValue());
|
list.add(platformReportDto);
|
|
|
return Result.success(list);
|
|
}
|
|
|
@PostMapping("/platformReport/detail")
|
@ApiOperation(value = "平台总览详情")
|
public Result<PlatformReportDetailDto> findDetail(@RequestBody PlatformReportParamDto platformReportParamDto) {
|
String timeType = platformReportParamDto.getTimeType();
|
String type = platformReportParamDto.getType();
|
List<PlatformReport> list;
|
boolean chanageMoneyFlag=false;
|
if(OrderEnum.用户量.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.用户量.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
}else if(OrderEnum.总下单量.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.总下单量.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
}else if(OrderEnum.总交易金额.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.总交易金额.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
chanageMoneyFlag=true;
|
}else if(OrderEnum.打包站回收金额.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.打包站回收金额.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
}else if(OrderEnum.投诉总量.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.投诉总量.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
}else if(OrderEnum.未提现总额.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.未提现总额.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
chanageMoneyFlag=true;
|
}else if(OrderEnum.已提现总额.getValue().equals(type)){
|
list=platformReportService.findByTypeAndTimeType(OrderEnum.已提现总额.getValue(),OrderEnum.按时间统计.getValue(),timeType);
|
}else {
|
list=new ArrayList<>();
|
}
|
PlatformReportDetailDto platformReportDetailDto = new PlatformReportDetailDto();
|
|
//波浪图数据
|
List<MapDto> mapList=CollUtil.newArrayList();
|
for (PlatformReport platformReport : list) {
|
MapDto mapDto=new MapDto();
|
mapDto.setKey(platformReport.getCreateTime());
|
if(chanageMoneyFlag){
|
mapDto.setValue(businessUtil.changeMoney(platformReport.getIndicator()));
|
}else {
|
mapDto.setValue(platformReport.getIndicator());
|
}
|
mapList.add(mapDto);
|
}
|
platformReportDetailDto.setList(mapList);
|
|
//日均数或3天等
|
double sum = list.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
if(chanageMoneyFlag){
|
platformReportDetailDto.setAverageNum(businessUtil.changeMoney(Convert.toStr(sum)));
|
}else {
|
platformReportDetailDto.setAverageNum(Convert.toStr(Convert.toInt(sum)));
|
}
|
//最后统计时间
|
if(CollUtil.isNotEmpty(list)) {
|
platformReportDetailDto.setTime(CollUtil.getLast(list).getCreateTime());
|
}else {
|
platformReportDetailDto.setTime(DateUtil.yesterday().toDateStr());
|
}
|
|
return Result.success(platformReportDetailDto);
|
}
|
|
|
|
@PostMapping("/platformReport/partner/find")
|
@ApiOperation(value = "合伙人总览")
|
public Result<List<PlatformReportPartnerResDto>> findByPartner(@RequestBody PlatformReportPartnerDto platformReportPartnerDto) {
|
List<PlatformReportPartnerResDto> list = CollUtil.newArrayList();
|
|
String type = platformReportPartnerDto.getType();
|
|
//按合伙人统计
|
List<PlatformReport> byIndicatorType = platformReportService.findByType(type,OrderEnum.按合伙人统计.getValue());
|
|
//按合伙人分组 注意-1的情况
|
List<List<PlatformReport>> userIdList = CollUtil.groupByField(byIndicatorType, "userId");
|
|
//设置合伙人名称等
|
List<String> partnerIds=CollUtil.newArrayList();
|
for (List<PlatformReport> platformReports : userIdList) {
|
BigDecimal allNum=BigDecimal.ZERO;
|
String userId = platformReports.get(0).getUserId();
|
PlatformReportPartnerResDto obj=new PlatformReportPartnerResDto();
|
if(Constants.DEFAULT_ID.equals(userId)){
|
obj.setName(Constants.DEFAULT_NAME);
|
}else {
|
String partnerName = cityPartnerService.queryById(Convert.toLong(userId)).getPartnerName();
|
obj.setName(partnerName);
|
}
|
//总数
|
double sum;
|
if(OrderEnum.未提现总额.getValue().equals(type)){
|
sum = platformReports.stream().filter(x->DateUtil.yesterday().toDateStr().equals(x.getCreateTime())).mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
}else {
|
sum = platformReports.stream().mapToDouble(x -> Convert.toDouble(x.getIndicator())).sum();
|
}
|
allNum=NumberUtil.add(allNum,sum);
|
obj.setAllNum(Convert.toStr(allNum));
|
//日环比
|
String ratio = platformReportService.getRatio(platformReports);
|
obj.setRatio(ratio);
|
list.add(obj);
|
|
partnerIds.add(platformReports.get(0).getUserId());
|
}
|
|
//查询所有合伙人
|
List<CityPartner> noDel;
|
|
if(OrderEnum.打包站回收金额.getValue().equals(type)){
|
noDel= cityPartnerService.findByTypeWithDel(OrderEnum.打包站.getValue());
|
}else {
|
noDel= cityPartnerService.findByTypeWithDel(OrderEnum.合伙人.getValue());
|
}
|
|
noDel=noDel.stream().filter(x->!partnerIds.contains(x.getId()+"")).collect(Collectors.toList());
|
//根据名称去重
|
noDel= noDel.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getPartnerName()))), ArrayList::new));
|
for (CityPartner cityPartner : noDel) {
|
PlatformReportPartnerResDto obj=new PlatformReportPartnerResDto();
|
obj.setName(cityPartner.getPartnerName());
|
obj.setAllNum("0");
|
obj.setRatio("+100.00%");
|
list.add(obj);
|
}
|
|
//按指标数升序
|
CollUtil.sort(list, (o1, o2) -> {
|
if(Convert.toBigDecimal(o1.getAllNum()).compareTo(Convert.toBigDecimal(o2.getAllNum()))>0){
|
return -1;
|
}else if(Convert.toBigDecimal(o1.getAllNum()).compareTo(Convert.toBigDecimal(o2.getAllNum()))==0){
|
return 0;
|
}else {
|
return 1;
|
}
|
});
|
return Result.success(list);
|
|
}
|
|
|
}
|