From fb530a1eb4f2a7344ee072ea490eaed9ba49c9ff Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 19 Mar 2025 14:28:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=B7=BB=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/mobile/AppStatisticsServiceImpl.java | 21 ++++++++++++++----- .../resources/mapper/StatisticsMapper.xml | 11 +++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java index 72bc198..f96e4fe 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/AppStatisticsServiceImpl.java @@ -139,23 +139,28 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //镜头检测游客数 Integer cameraShotOfMemberNum=statisticsMapper.countCameraShotOfMember(query); //扫码访问人数 + // 扫小程序码或景区码进入访问的用户数,包括授权用户(使用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; @@ -163,6 +168,7 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //生成视频人数_预览视频人数_转化率 vo.setCvom_pvom((calculateConversionRate(previewVideoOfMemberNum,completeVideoOfMemberNum))); //点击购买人数 + // 点了立即购买按钮的用户ID就算,包括支付的和未支付的都算,只要点击了。 Integer clickOnPayOfMemberNum =statisticsMapper.countClickPayOfMember(query); //预览视频人数_点击购买人数_转化率 vo.setPvom_cpom((calculateConversionRate(clickOnPayOfMemberNum,previewVideoOfMemberNum))); @@ -171,9 +177,11 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { //点击购买人数_支付订单人数_转化率 vo.setCpom_pom((calculateConversionRate(payOfMemberNum,clickOnPayOfMemberNum))); //总访问人数 + // 通过任何途径访问到小程序的总人数,包括授权用户和未授权用户。 Integer totalVisitorOfMemberNum =statisticsMapper.countTotalVisitorOfMember(query); // Integer totalVisitorOfMemberNum =scanCodeVisitorOfMemberNum; //生成视频条数 + // 仅指代生成的Vlog条数,不包含录像原片。 Integer completeOfVideoNum =statisticsMapper.countCompleteOfVideo(query); //预览视频条数 Integer previewOfVideoNum =statisticsMapper.countPreviewOfVideo(query); @@ -341,15 +349,16 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { int payCount=statisticsMapper.countPayOfOrder(query); if(cycle==1){ - //当前周期的支付订单金额 + // 支付过订单的金额,包含已退款的金额。 vo.setNowOrderAmount(orderAmountDf.format(orderAmount)); - //当前周期预览_支付转化率、扫码_付费用户转化率 + // 订单数÷预览人数。假设一共5个人预览,产生了3个订单,其实是2个人支付的(其中1人购买2单),预览-支付转化率是3÷5,而不是2÷5。 if(preview==0){ vo.setNowPreviewPay("0.00"); }else { - BigDecimal previewPay = new BigDecimal(pay).divide(new BigDecimal(preview), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + BigDecimal previewPay = new BigDecimal(payCount).divide(new BigDecimal(preview), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); vo.setNowPreviewPay(df.format(previewPay)); } + // 付费的用户人数÷扫码的用户人数。此处是人数除以人数,而且是除以扫码人数,而不是预览人数。 if(scanCode==0){ vo.setNowScanCodePay("0.00"); }else { @@ -358,14 +367,16 @@ public class AppStatisticsServiceImpl implements AppStatisticsService { } }else if(cycle==2){ //上一个周期的支付订单金额 + // 支付过订单的金额,包含已退款的金额。 vo.setPreviousOrderAmount(orderAmountDf.format(orderAmount)); - // 计算预览_支付转化率 + // 订单数÷预览人数。假设一共5个人预览,产生了3个订单,其实是2个人支付的(其中1人购买2单),预览-支付转化率是3÷5,而不是2÷5。 if(preview==0){ vo.setPreviousPreviewPay("0.00"); }else { - BigDecimal previewPay = new BigDecimal(pay).divide(new BigDecimal(preview), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); + BigDecimal previewPay = new BigDecimal(payCount).divide(new BigDecimal(preview), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); vo.setPreviousPreviewPay(df.format(previewPay)); } + // 付费的用户人数÷扫码的用户人数。此处是人数除以人数,而且是除以扫码人数,而不是预览人数。 if(scanCode==0){ vo.setPreviousScanCodePay("0.00"); }else { diff --git a/src/main/resources/mapper/StatisticsMapper.xml b/src/main/resources/mapper/StatisticsMapper.xml index 7b37cf8..a86a338 100644 --- a/src/main/resources/mapper/StatisticsMapper.xml +++ b/src/main/resources/mapper/StatisticsMapper.xml @@ -155,17 +155,16 @@