【实时数仓】省份交易额统计接口、新老访客对比接口、访客分时统计接口

article/2025/11/7 0:55:42

文章目录

  • 一 省份交易额统计接口
    • 1 Sugar配置
      • (1)图表配置
      • (2)接口地址
      • (3)数据格式
      • (4)执行SQL
    • 2 数据接口实现
      • (1)创建地区交易额统计实体类ProvinceStats
      • (2)Mapper层:创建ProvinceStatsMapper接口
      • (3)Service层:创建ProvinceStatsService接口
      • (4)Service层:创建ProvinceStatsServiceImpl实现类
      • (5)Controller层:在SugarController中增加方法
      • (6)测试
  • 二 新老访客对比接口
    • 1 Sugar配置
      • (1)图表配置
      • (2)接口地址
      • (3)数据格式
      • (4)执行SQL
    • 2 数据接口实现
      • (1)创建访问流量统计实体类VisitorStats
      • (2)Mapper层:创建VisitorStatsMapper
      • (3)Service层:创建VisitorStatsService接口
      • (4)Service层:创建VisitorStatsServiceImpl实现类
      • (5)Controller层:在SugarController中增加方法
      • (6)测试
  • 三 访客分时统计接口
    • 1 Sugar配置
      • (1)图表配置
      • (2)接口地址
      • (3)数据格式
      • (4)执行SQL
    • 2 数据接口实现
      • (1)Mapper
      • (2)Service
      • (3)ServiceIml
      • (4)Controller
      • (5)测试

一 省份交易额统计接口

1 Sugar配置

(1)图表配置

在这里插入图片描述

(2)接口地址

https://m23o108551.zicp.fun/api/sugar/province?date=20221215

(3)数据格式

{"status": 0,"data": {"mapData": [{"name": "北京","value": 9350,},{"name": "天津","value": 9317,}],"valueName": "交易额",}
}

(4)执行SQL

province_stats_2022表结构:
在这里插入图片描述

select province_id,province_name,sum(order_amount) order_amount from province_stats_2022 where toYYYYMMDD(stt)=20221215 group by province_id,province_name;

2 数据接口实现

(1)创建地区交易额统计实体类ProvinceStats

package com.hzy.gmall.publisher.beans;
/*** Desc: 地区交易额统计实体类*/
@AllArgsConstructor
@Data
@NoArgsConstructor
public class ProvinceStats {private String stt;private String edt;private String province_id;private String province_name;private BigDecimal order_amount;private String ts;
}

(2)Mapper层:创建ProvinceStatsMapper接口

package com.hzy.gmall.publisher.mapper;
/*** 地区统计Mapper*/
public interface ProvinceStatsMapper {@Select("select province_id,province_name,sum(order_amount) order_amount " +"from province_stats_2022 " +"where toYYYYMMDD(stt)=#{date} " +"group by province_id,province_name;")List<ProvinceStatsMapper> selectProvinceStats(Integer date);
}

(3)Service层:创建ProvinceStatsService接口

package com.hzy.gmall.publisher.service;
/***地区统计service接口*/
public interface ProvinceStatsService {List<ProvinceStats> getProvinceStats(Integer date);
}

(4)Service层:创建ProvinceStatsServiceImpl实现类

package com.hzy.gmall.publisher.service.impl;
/*** 地区统计service实现类*/
@Service
public class ProvinceStatsServiceImpl implements ProvinceStatsService {@Autowiredprivate ProvinceStatsMapper provinceStatsMapper;@Overridepublic List<ProvinceStats> getProvinceStats(Integer date) {return provinceStatsMapper.selectProvinceStats(date);}
}

(5)Controller层:在SugarController中增加方法

@Autowired
private ProvinceStatsService provinceStatsService;@RequestMapping("/province")
public String getProvinnceStats(@RequestParam(value = "date",defaultValue = "0") Integer date){if (date == 0) {date = now();}List<ProvinceStats> provinceStatsList = provinceStatsService.getProvinceStats(date);StringBuilder jsonBuilder = new StringBuilder("{\"status\": 0,\"data\": {\"mapData\": [");for (int i = 0; i < provinceStatsList.size(); i++) {ProvinceStats provinceStats = provinceStatsList.get(i);jsonBuilder.append("{\"name\": \""+provinceStats.getProvince_name()+"\",\"value\": "+provinceStats.getOrder_amount()+"}");if (i < provinceStatsList.size() - 1 ){jsonBuilder.append(",");}}jsonBuilder.append("],\"valueName\": \"交易额\"}}");return jsonBuilder.toString();
}

(6)测试

$API_HOST/api/sugar/province?date=20221215

在这里插入图片描述
在这里插入图片描述

二 新老访客对比接口

1 Sugar配置

(1)图表配置

在这里插入图片描述
在这里插入图片描述

(2)接口地址

https://m23o108551.zicp.fun/api/sugar/visitor?date=20221213

(3)数据格式

{"status": 0,"data": {"columns": [{"name": "类别","id": "type"},{"name": "新用户","id": "new"},{"name": "老用户","id": "old"}],"rows": [{"type": "用户数(人)","new": 200,"old": 500},{"type": "总访问页面(次)","new": 200,"old": 500},{"type": "跳出率(%)","new": 200,"old": 500},{"type": "平均在线时长(秒)","new": 200,"old": 500},{"type": "平均访问页面数(次)","new": 200,"old": 500}]}
}

(4)执行SQL

visitor_stats_2022表结构:

在这里插入图片描述

select is_new,sum(uv_ct) uv_ct,sum(pv_ct) pv_ct,sum(sv_ct) sv_ct,sum(uj_ct) uj_ct,sum(dur_sum) dur_sum from visitor_stats_2022 where toYYYYMMDD(stt)=20221213 group by is_new;

2 数据接口实现

(1)创建访问流量统计实体类VisitorStats

package com.hzy.gmall.publisher.beans;
/*** Desc: 访客流量统计实体类*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class VisitorStats {private String stt;private String edt;private String vc;private String ch;private String ar;private String is_new;private Long uv_ct = 0L;private Long pv_ct = 0L;private Long sv_ct = 0L;private Long uj_ct = 0L;private Long dur_sum = 0L;private Long new_uv = 0L;private Long ts;private int hr;//计算跳出率  = 跳出次数*100/访问次数public BigDecimal getUjRate() {if (sv_ct != 0L) {return BigDecimal.valueOf(uj_ct).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(sv_ct), 2, RoundingMode.HALF_UP);} else {return BigDecimal.ZERO;}}//计算每次访问停留时间(秒)  = 当日总停留时间(毫秒)/当日访问次数/1000public BigDecimal getDurPerSv() {if (sv_ct != 0L) {return BigDecimal.valueOf(dur_sum).divide(BigDecimal.valueOf(sv_ct), 0, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(1000), 1, RoundingMode.HALF_UP);} else {return BigDecimal.ZERO;}}//计算每次访问停留页面数 = 当日总访问页面数/当日访问次数public BigDecimal getPvPerSv() {if (sv_ct != 0L) {return BigDecimal.valueOf(pv_ct).divide(BigDecimal.valueOf(sv_ct), 2, RoundingMode.HALF_UP);} else {return BigDecimal.ZERO;}}
}

(2)Mapper层:创建VisitorStatsMapper

package com.hzy.gmall.publisher.mapper;public interface VisitorStatsMapper {@Select("select is_new,sum(uv_ct) uv_ct,sum(pv_ct) pv_ct,sum(sv_ct) sv_ct," +"sum(uj_ct) uj_ct,sum(dur_sum) dur_sum " +"from visitor_stats_2022 " +"where toYYYYMMDD(stt)=#{date} " +"group by is_new")List<VisitorStats> selectVisitorStats(Integer date);
}

(3)Service层:创建VisitorStatsService接口

package com.hzy.gmall.publisher.service;public interface VisitorStatsService {List<VisitorStats> getVisitorStats(Integer date);
}

(4)Service层:创建VisitorStatsServiceImpl实现类

package com.hzy.gmall.publisher.service.impl;@Service
public class VisitorStatsServiceImpl implements VisitorStatsService {@Autowiredprivate VisitorStatsMapper visitorStatsMapper;@Overridepublic List<VisitorStats> getVisitorStats(Integer date) {return visitorStatsMapper.selectVisitorStats(date);}
}

(5)Controller层:在SugarController中增加方法

@Autowired
private VisitorStatsService visitorStatsService;@RequestMapping("visitor")
public String getVisitorStats(@RequestParam(value = "date",defaultValue = "0") Integer date){if (date == 0){date = now();}List<VisitorStats> visitorStatsList = visitorStatsService.getVisitorStats(date);VisitorStats newVisitorStats = new VisitorStats();VisitorStats oldVisitorStats = new VisitorStats();for (VisitorStats visitorStats : visitorStatsList) {if ("1".equals(visitorStats.getIs_new())){// 新访客newVisitorStats = visitorStats;}else{// 老访客oldVisitorStats = visitorStats;}}String json = "{\"status\": 0,\"data\": {\"columns\": [" +"      {\"name\": \"类别\",\"id\": \"type\"}," +"      {\"name\": \"新用户\",\"id\": \"new\"}," +"      {\"name\": \"老用户\",\"id\": \"old\"}],\"rows\": [" +"      {\"type\": \"用户数(人)\",\"new\": "+newVisitorStats.getUv_ct()+",\"old\": "+oldVisitorStats.getUv_ct()+"}," +"      {\"type\": \"总访问页面(次)\",\"new\": "+newVisitorStats.getPv_ct()+",\"old\": "+oldVisitorStats.getPv_ct()+"}," +"      {\"type\": \"跳出率(%)\",\"new\": "+newVisitorStats.getUjRate()+",\"old\": "+oldVisitorStats.getUjRate()+"}," +"      {\"type\": \"平均在线时长(秒)\",\"new\": "+newVisitorStats.getDurPerSv()+",\"old\": "+oldVisitorStats.getDurPerSv()+"}," +"      {\"type\": \"平均访问页面数(次)\",\"new\": "+newVisitorStats.getPvPerSv()+",\"old\": "+oldVisitorStats.getPvPerSv()+"}]}}";return json;
}

(6)测试

https://m23o108551.zicp.fun/api/sugar/visitor?date=20221213

在这里插入图片描述

三 访客分时统计接口

统计指标:uv,pv,新访客uv

1 Sugar配置

(1)图表配置

在这里插入图片描述

(2)接口地址

https://m23o108551.zicp.fun/api/sugar/hr?date=20221213

(3)数据格式

{"status": 0,"data": {"categories": ["00","01","02","...","23"],"series": [{"name": "UV","data": [4919,2252,...,2537]},{"name": "PV","data": [7979,10500,...,8428]},{"name": "NewUV","data": [11291,20146,...,6257]}]}
}

(4)执行SQL

select toHour(stt) hr,sum(uv_ct) uv_ct,sum(pv_ct) pv_ct,sum(if(is_new='1',visitor_stats_2022.uv_ct,0)) new_uv from visitor_stats_2022 where toYYYYMMDD(stt)=20221213 group by hr;

2 数据接口实现

(1)Mapper

@Select("select toHour(stt) hr,sum(uv_ct) uv_ct,sum(pv_ct) pv_ct," +"sum(if(is_new='1',visitor_stats_2022.uv_ct,0)) new_uv " +"from visitor_stats_2022 " +"where toYYYYMMDD(stt)=#{date} " +"group by hr;")
List<VisitorStats> selectVisitorStatsByHr(Integer date);

(2)Service

List<VisitorStats> getVisitorStatsByHr(Integer date);

(3)ServiceIml

@Override
public List<VisitorStats> getVisitorStatsByHr(Integer date) {return visitorStatsMapper.selectVisitorStatsByHr();
}

(4)Controller

@RequestMapping("hr")
public String getVisitorStatsByHr(@RequestParam(value = "date",defaultValue = "0") Integer date){if (date == 0){date = now();}// 从service中获取分时访问情况List<VisitorStats> visitorStatsList = visitorStatsService.getVisitorStatsByHr(date);// 定义数组,存放24小时的分时统计情况VisitorStats[] visitorStatsArr = new VisitorStats[24];// 从集合中获取结果,赋值给数组中相对应的小时for (VisitorStats visitorStats : visitorStatsList) {visitorStatsArr[visitorStats.getHr()] = visitorStats;}// 用于存放24小时的集合List hrList = new ArrayList();// 用于存放每个小时uv情况的集合List uvList = new ArrayList();// 用于存放每个小时pv情况的集合List pvList = new ArrayList();// 用于存放新访客每个小时uv情况的集合List newUvList = new ArrayList();// 从数组中获取一天24小时的数据for (int hr = 0; hr < visitorStatsArr.length; hr++) {VisitorStats visitorStats = visitorStatsArr[hr];if (visitorStats != null){uvList.add(visitorStats.getUv_ct());pvList.add(visitorStats.getPv_ct());newUvList.add(visitorStats.getNew_uv());}else{uvList.add(0L);pvList.add(0L);newUvList.add(0L);}hrList.add(String.format("%02d",hr));}String json = "{\"status\": 0,\"data\": {\"categories\": " +"[\""+ StringUtils.join(hrList,"\",\"")+"\"]," +"\"series\": [" +"{\"name\": \"UV\",\"data\":["+StringUtils.join(uvList,",")+"]}," +"{\"name\": \"PV\",\"data\":["+StringUtils.join(pvList,",")+"]}," +"{\"name\": \"NewUV\",\"data\":["+StringUtils.join(newUvList,",")+"]" +"}]}}";return json;
}

(5)测试

$API_HOST/api/sugar/hr?date=20221213

在这里插入图片描述


http://chatgpt.dhexx.cn/article/cUM6QrCS.shtml

相关文章

讯商科技丨wms仓储系统的优劣如何判断

WMS系统可以有效地提高工作效率&#xff0c;降低管理成本&#xff0c;这实际上是企业选择使用某些WMS仓库系统的主要原因。那么&#xff0c;我们如何判断WMS系统的优缺点呢&#xff1f; ASP.NET技术通常用于WMS仓储系统。随着信息技术的不断更新和迭代&#xff0c;Java技术正变…

智慧物流wms仓储管理系统

随着国内生产制造业的复苏以及电子商务的不断飞速发展,物流企业也在进一步地加大与拓展着自己的业务水平以及范围。透过RFID技术的物流wms仓储管理系统,不但可以为实现高效的运作体系以及现代化的仓储管理,提供技术层面上的支持,同时在功能上也可以实现对于货物的定位、叉车…

WMS仓储条码管理系统解决方案

WMS仓储条码管理系统是一套先进的适用于各行业的智能仓库管理软件&#xff0c;它不仅实现了仓库货物的先进先出&#xff0c;还能根据具体的企业仓库情况设计各种不同信息要求&#xff0c;并使得仓库货品的出库、入库、盘点等操作直接通过条码扫描枪来完成&#xff0c;极大的减轻…

教你从0-1搭建WMS仓储管理系统

什么是仓储管理系统&#xff1f;如何从0-1搭建WMS仓储管理系统&#xff1f; 01 什么是仓储管理系统&#xff1f; 仓储管理系统即WMS&#xff08;Warehouse Management System&#xff09;主要用于管理企业的仓库&#xff0c;在仓库内进行库存的管理、货物的进出库管理、物流配…

通过WMS仓储管理系统解决方案,实施企业数字化战略

WMS仓储管理系统向上和ERP系统、MES系统有大量数据交互&#xff0c;为企业信息化战略提供支撑&#xff0c;向下则控制AGV小车、输送机等物流设备。同时WMS仓储管理系统具备管理层、控制层、感知层等多层次人机交互终端&#xff0c;是具有高度集成性特征的信息系统。因此WMS仓储…

WMS仓储管理系统

WMS系统是华天软件根据仓储物流管理的建设实施经验而推出的一款专业化仓储管理软件。与传统进销存软件相比优势在于&#xff0c;其不但包含了正常的出入库、盘点等库存管理基本功能&#xff0c;重点在于可以实现仓库作业过程的管理&#xff0c;通过条码及PDA等技术手段&#xf…

wms系统提升仓储管理效率(上)

在零售门店货架成本不断上涨和交付周期要求日益严格的双重压力下,企业的配送服务需要按订单要求将正确的货品送达正确的地点,而且需要在品规数量完整、准时送达、适应小额高频订单趋势、有助于门店上架、具有竞争力的价格等方面下功夫。 wms系统提升仓储管理效率此外,考虑到…

WMS系统学习之ModernWMS

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 WMS系统学习之ModernWMS 前言 WMS系统&#xff1a;仓储管理系统&#xff08;WMS&#xff09;是一个实时的计算机软件系统&#xff0c;它能够按照运作的业务规则和运算法则&a…

第三方物流wms仓储管理的主要内容

仓储管理高效有序地运行,特别是在当今的信息时代,将先进的信息技术、网络技术应用、高素质的人才到仓储管理中,会极大地促进物流事业的发展,第三方物流仓储管理工作具有广阔的发展前景。 第三方物流wms仓储管理的主要内容第三方物流wms仓储管理系统主要包含哪些内容?你造吗…

WMS仓库仓储管理系统源码

WMS仓库管理系统源码 WMS仓储管理系统源码 源码类型&#xff1a;全开源免费分享 WMS仓储管理系统作为现代物流系统中的主要组成部分&#xff0c;是一种多层次存放货物的高架仓库系统&#xff0c;由自动控制与管理系统、货架、巷道式堆垛机、出入库输送机等设 备构成&#xff…

WMS仓储管理系统解决方案

1、仓库管理概述 仓储在企业的整个供应链中起着至关重要的作用&#xff0c;如果不能保证正确的进货和库存控制及发货&#xff0c;将会导致管理费用的增加&#xff0c;服务质量难以得到保证&#xff0c;从而影响企业的竞争力。传统简单、静态的仓库管理已无法保证企业资源的高效…

WMS仓储系统能给企业带来哪些帮助?

企业使用WMS系统能够帮助企业更有效地管理仓储运输业务&#xff0c;提高企业的运营效率&#xff0c;降低运营成本。 1、提高库存管理效率 WMS系统能够自动化地进行库存管理&#xff0c;包括库存盘点、库存调拨等操作&#xff0c;能够有效避免人工管理过程中的诸多错误&#x…

WMS仓储管理系统源码

淘源码&#xff1a;国内专业的免费源码下载平台 需要源码学习可私信我。 该程序使用的.NET MVC开发&#xff0c;大量使用到了jQuery,以及Bootstrap。 数据库使用了SQL Server. 该系统大部分使用于生产制造厂,其中结合了制造厂的采购,销售,生产等. 开源部分是仓库系统后台管理…

带你了解食品WMS仓储系统的价值

食品的安全问题一直是个热门话题&#xff0c;网络上也不断有食品安全事件的报道&#xff0c;对于食品企业来说&#xff0c;做好食品的安全卫生存储&#xff0c;保障食品流通的每一环节&#xff0c;是食品企业应高度重视的课题。 为了给消费者提供健康安全、口感上乘的食品体验…

PPT:WMS仓储系统解决方案

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。 知识星球 * 原创电子书 * 深海社区 * 微信群 完整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载。 知名企业 福利 定位&#xff1a…

什么是wms仓储管理系统?

Warehouse Management System 简称WMS&#xff0c;也就是我们经常讲到的仓储管理系统。 从狭义上来讲它是一个实时的计算机软件系统&#xff0c;它能够按照运作的业务规则和运算法则&#xff0c;对信息、资源、行为、存货和分销运作进行更完美地管理&#xff0c;提高效率。仓库…

机器学习知识图谱

引言&#xff1a;人类的未来就是失控&#xff0c;就是人与机器共生、共存。机器越来越人性化&#xff0c; 人越来越机器化。《失控》这本书&#xff0c;主要就体现了这一思想。 本文选自《全栈数据之门》一书。 琅琊榜首&#xff0c;江左梅郎&#xff0c;得之可得数据科学之天下…

“机器学习”名字的由来

阿瑟萨缪尔(Arthur Samuel, 1901-1990) 阿瑟萨缪尔是人工智能研究的先驱。 从1949年到1960年代后期&#xff0c;他在让计算机从经验中学习方面做了最出色的工作&#xff0c;而他的研究工具是跳棋游戏。&#xff08;玩游戏的程序通常在人工智能研究中扮演果蝇在遗传学中所扮演的…

机器学习之深度学习简介

文章目录 深度学习1. 深度学习介绍2. 深度学习原理3. 深度学习实现 深度学习 1. 深度学习介绍 深度学习&#xff08;Deep learning&#xff09;是机器学习的一个分支领域,其源于人工 神经网络的研究。 深度学习广泛应用在计算机视觉,音频处理,自然语言处理等诸多领 域。 人工…

五分钟了解机器学习的基本概念

目录 1、人工智能、机器学习、深度学习之间的关系 2、什么是机器学习&#xff1f; 3、机器学习的常见问题之 过拟合 4、如何克服过拟合&#xff1f; 5、机器学习的类型 6、分类和回归 1、人工智能、机器学习、深度学习之间的关系 总的来说&#xff0c;深度学习时机器学习的…