You've already forked FrameTour-BE
1
This commit is contained in:
@@ -2,6 +2,7 @@ package com.ycwl.basic.mapper;
|
||||
|
||||
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
|
||||
import com.ycwl.basic.model.mobile.statistic.resp.AppStatisticsFunnelVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -93,4 +94,7 @@ public interface StatisticsMapper {
|
||||
List<Long> getBrokerIdListForUser(Long memberId, Date startTime, Date endTime);
|
||||
|
||||
Long getUserRecentEnterType(Long memberId, Date endTime);
|
||||
|
||||
List<AppStatisticsFunnelVO> listStatByScenic(Long scenicId, Date startTime, Date endTime);
|
||||
int insertStat(Long scenicId, Date date, AppStatisticsFunnelVO data);
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@ package com.ycwl.basic.model.mobile.statistic.resp;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
/**
|
||||
* @Author:longbinbin
|
||||
@@ -13,49 +15,106 @@ import lombok.Data;
|
||||
public class AppStatisticsFunnelVO {
|
||||
|
||||
@ApiModelProperty("镜头检测游客数")
|
||||
// private Integer cameraShotOfMemberNum;
|
||||
private String cameraShotOfMemberNum;
|
||||
@ApiModelProperty("镜头检测游客数_扫码访问人数_转化率")
|
||||
private String csom_scaom;
|
||||
private int cameraShotOfMemberNum; // cs1
|
||||
@ApiModelProperty("扫码访问人数")
|
||||
private Integer scanCodeVisitorOfMemberNum;
|
||||
@ApiModelProperty("扫码访问人数_上传头像人数_转化率")
|
||||
private String scaom_ufom;
|
||||
private int scanCodeVisitorOfMemberNum; // sv1
|
||||
@ApiModelProperty("上传头像(人脸)人数")
|
||||
private Integer uploadFaceOfMemberNum;
|
||||
@ApiModelProperty("上传头像人数_推送订阅人数_转化率")
|
||||
private String ufom_pom;
|
||||
private int uploadFaceOfMemberNum; // u1
|
||||
@ApiModelProperty("推送订阅人数")
|
||||
private Integer pushOfMemberNum;
|
||||
@ApiModelProperty("推送订阅人数_生成视频人数_转化率")
|
||||
private String pom_cvom;
|
||||
private int pushOfMemberNum; // m1
|
||||
@ApiModelProperty("生成视频人数")
|
||||
private Integer completeVideoOfMemberNum;
|
||||
@ApiModelProperty("生成视频人数_预览视频人数_转化率")
|
||||
private String cvom_pvom;
|
||||
private int completeVideoOfMemberNum; // gv1
|
||||
@ApiModelProperty("预览视频人数")
|
||||
private Integer previewVideoOfMemberNum;
|
||||
@ApiModelProperty("预览视频人数_点击购买人数_转化率")
|
||||
private String pvom_cpom;
|
||||
private int previewVideoOfMemberNum; // pv1
|
||||
@ApiModelProperty("点击购买人数")
|
||||
private Integer clickOnPayOfMemberNum;
|
||||
@ApiModelProperty("点击购买人数_支付订单人数_转化率")
|
||||
private String cpom_pom;
|
||||
private int clickOnPayOfMemberNum; // cp1
|
||||
@ApiModelProperty("支付订单人数")
|
||||
private Integer payOfMemberNum;
|
||||
private int payOfMemberNum; // p1
|
||||
|
||||
@ApiModelProperty("总访问人数")
|
||||
private Integer totalVisitorOfMemberNum;
|
||||
private int totalVisitorOfMemberNum; // v1
|
||||
@ApiModelProperty("生成视频条数")
|
||||
private Integer completeOfVideoNum;
|
||||
private int completeOfVideoNum; // gv2
|
||||
@ApiModelProperty("预览视频条数")
|
||||
private Integer previewOfVideoNum;
|
||||
private int previewOfVideoNum; // pv2
|
||||
@ApiModelProperty("支付订单数")
|
||||
private Integer payOfOrderNum;
|
||||
private int payOfOrderNum; // p2
|
||||
@ApiModelProperty("支付订单金额")
|
||||
private String payOfOrderAmount;
|
||||
private BigDecimal payOfOrderAmount; // o3
|
||||
@ApiModelProperty("退款订单数")
|
||||
private Integer refundOfOrderNum;
|
||||
private int refundOfOrderNum; // ro2
|
||||
@ApiModelProperty("退款订单金额")
|
||||
private String refundOfOrderAmount;
|
||||
private BigDecimal refundOfOrderAmount; // ro3
|
||||
|
||||
@ApiModelProperty("镜头检测游客数_扫码访问人数_转化率")
|
||||
public String getCsom_scaom() {
|
||||
return "-"; // TODO: REAL
|
||||
}
|
||||
|
||||
@ApiModelProperty("扫码访问人数_上传头像人数_转化率")
|
||||
public String getScaom_ufom() {
|
||||
if (uploadFaceOfMemberNum == 0 || scanCodeVisitorOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(uploadFaceOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(scanCodeVisitorOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
@ApiModelProperty("上传头像人数_推送订阅人数_转化率")
|
||||
public String getUfom_pom() {
|
||||
if (pushOfMemberNum == 0 || uploadFaceOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(uploadFaceOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(pushOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
@ApiModelProperty("推送订阅人数_生成视频人数_转化率")
|
||||
public String getPom_cvom() {
|
||||
if (completeVideoOfMemberNum == 0 || pushOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(completeVideoOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(pushOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
@ApiModelProperty("生成视频人数_预览视频人数_转化率")
|
||||
public String getCvom_pvom() {
|
||||
if (previewVideoOfMemberNum == 0 || completeVideoOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(previewVideoOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(completeVideoOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
@ApiModelProperty("预览视频人数_点击购买人数_转化率")
|
||||
public String getPvom_cpom() {
|
||||
if (clickOnPayOfMemberNum == 0 || previewVideoOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(clickOnPayOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(previewVideoOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
@ApiModelProperty("点击购买人数_支付订单人数_转化率")
|
||||
public String getCpom_pom() {
|
||||
if (payOfMemberNum == 0 || clickOnPayOfMemberNum == 0) {
|
||||
return "0.00";
|
||||
}
|
||||
return new BigDecimal(payOfMemberNum)
|
||||
.multiply(new BigDecimal(100))
|
||||
.divide(new BigDecimal(clickOnPayOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||
.toString();
|
||||
}
|
||||
public String getPayOfOrderAmount() {
|
||||
return payOfOrderAmount.toString();
|
||||
}
|
||||
public String getRefundOfOrderAmount() {
|
||||
return refundOfOrderAmount.toString();
|
||||
}
|
||||
}
|
||||
|
@@ -141,41 +141,26 @@ public class AppStatisticsServiceImpl implements AppStatisticsService {
|
||||
//扫码访问人数
|
||||
// 扫小程序码或景区码进入访问的用户数,包括授权用户(使用OpenID进行精准统计)和未授权用户(使用 UUID统计访问)。但当用户授权时,获取OpenID并与UUID关联,删除本地UUID,避免重复记录。
|
||||
Integer scanCodeVisitorOfMemberNum=statisticsMapper.countScanCodeOfMember(query);
|
||||
//镜头检测游客数_扫码访问人数_转化率
|
||||
// vo.setCsom_scaom(calculateConversionRate(scanCodeVisitorOfMemberNum,cameraShotOfMemberNum));
|
||||
vo.setCsom_scaom("-");
|
||||
//上传头像(人脸)人数
|
||||
// 上传了人脸的用户数(包括本地临时ID和获取到OpenID的,同一设备微信获取到OpenID要覆盖掉之前生成的临时ID),上传多张人脸都只算一个人。
|
||||
Integer uploadFaceOfMemberNum=statisticsMapper.countUploadFaceOfMember(query);
|
||||
//扫码访问人数_上传头像人数_转化率
|
||||
vo.setScaom_ufom(calculateConversionRate(uploadFaceOfMemberNum,scanCodeVisitorOfMemberNum));
|
||||
//推送订阅人数
|
||||
// 只要点了允许通知,哪怕只勾选1条订阅都算
|
||||
Integer pushOfMemberNum =statisticsMapper.countPushOfMember(query);
|
||||
//上传头像人数_推送订阅人数_转化率
|
||||
vo.setUfom_pom((calculateConversionRate(pushOfMemberNum,uploadFaceOfMemberNum)));
|
||||
//生成视频人数
|
||||
// 生成过Vlog视频的用户ID数,要注意屏蔽掉以前没有片段也能生成的情况
|
||||
Integer completeVideoOfMemberNum =statisticsMapper.countCompleteVideoOfMember(query);
|
||||
//推送订阅人数_生成视频人数_转化率
|
||||
vo.setPom_cvom((calculateConversionRate(completeVideoOfMemberNum,pushOfMemberNum)));
|
||||
//预览视频人数
|
||||
// 购买前播放了5秒的视频条数。
|
||||
Integer previewVideoOfMemberNum =statisticsMapper.countPreviewVideoOfMember(query);
|
||||
if (previewVideoOfMemberNum==null){
|
||||
previewVideoOfMemberNum=0;
|
||||
}
|
||||
//生成视频人数_预览视频人数_转化率
|
||||
vo.setCvom_pvom((calculateConversionRate(previewVideoOfMemberNum,completeVideoOfMemberNum)));
|
||||
//点击购买人数
|
||||
// 点了立即购买按钮的用户ID就算,包括支付的和未支付的都算,只要点击了。
|
||||
Integer clickOnPayOfMemberNum =statisticsMapper.countClickPayOfMember(query);
|
||||
//预览视频人数_点击购买人数_转化率
|
||||
vo.setPvom_cpom((calculateConversionRate(clickOnPayOfMemberNum,previewVideoOfMemberNum)));
|
||||
//支付订单人数
|
||||
Integer payOfMemberNum =statisticsMapper.countPayOfMember(query);
|
||||
//点击购买人数_支付订单人数_转化率
|
||||
vo.setCpom_pom((calculateConversionRate(payOfMemberNum,clickOnPayOfMemberNum)));
|
||||
//总访问人数
|
||||
// 通过任何途径访问到小程序的总人数,包括授权用户和未授权用户。
|
||||
Integer totalVisitorOfMemberNum =statisticsMapper.countTotalVisitorOfMember(query);
|
||||
@@ -194,8 +179,6 @@ public class AppStatisticsServiceImpl implements AppStatisticsService {
|
||||
//退款订单金额
|
||||
BigDecimal refundOfOrderAmount =statisticsMapper.countRefundAmount(query);
|
||||
|
||||
// vo.setCameraShotOfMemberNum(cameraShotOfMemberNum);
|
||||
vo.setCameraShotOfMemberNum("-");
|
||||
vo.setScanCodeVisitorOfMemberNum(scanCodeVisitorOfMemberNum);
|
||||
vo.setUploadFaceOfMemberNum(uploadFaceOfMemberNum);
|
||||
vo.setPushOfMemberNum(pushOfMemberNum);
|
||||
@@ -211,9 +194,9 @@ public class AppStatisticsServiceImpl implements AppStatisticsService {
|
||||
vo.setCompleteOfVideoNum(completeOfVideoNum);
|
||||
vo.setPreviewOfVideoNum(previewOfVideoNum);
|
||||
vo.setPayOfOrderNum(payOfOrderNum);
|
||||
vo.setPayOfOrderAmount(df.format(payOfOrderAmount.setScale(2, RoundingMode.HALF_UP)));
|
||||
vo.setPayOfOrderAmount(payOfOrderAmount.setScale(2, RoundingMode.HALF_UP));
|
||||
vo.setRefundOfOrderNum(refundOfOrderNum);
|
||||
vo.setRefundOfOrderAmount(df.format(refundOfOrderAmount.setScale(2, RoundingMode.HALF_UP)));
|
||||
vo.setRefundOfOrderAmount(refundOfOrderAmount.setScale(2, RoundingMode.HALF_UP));
|
||||
|
||||
return ApiResponse.success(vo);
|
||||
}
|
||||
|
Reference in New Issue
Block a user