24、生鲜电商平台-系统报表设计与架构

说明:任何一个运行的平台都需要一个很清楚的报表来显示,那么作为Java开源生鲜电商平台而言,我们应该如何设计报表呢?或者说我们希望报表来看到什么数据呢?

          通过报表我们可以分析出目前整个公司的运营情况,以及下一步的调整方向,这样更加有理有据的掌握整个市场与决策。

设计基础维度:

   1. 今日订单,今日营业额,总订单数,总营业额

         2. 今日的注册买家,总的注册买家。

         3. 实时的营收,实时的下单买家。

         4. 今日下单买家,空降A(空降A指的是今天注册同时下单的客户)

数据的力量在于清楚的明白的告诉整个系统运营人员,昨天我们的销售团队创造了多少的业绩,以及整个趋势是怎么样的,今天的努力方向是怎么样的,昨天的所获是怎么样的

如何进行一起努力与学习。

业务分析: 今日订单,今日营业额,总订单数,总营业额等来源于订单表以及订单汇总表。鉴于数据量并不是很大,所以可以实时的进行查询。

如果存在数据量过大,比如订单表我们有100w的数量,那么可以采用定时器在规定的时间内进行执行,然后把统计结果放在统计表中

统计表的系统设计如下:

CREATE TABLE `report_days` (
  `id` bigint(20) DEFAULT NULL,
  `order_number_count` int(11) DEFAULT NULL COMMENT ‘今日订单数‘,
  `order_rmb_count` decimal(12,2) DEFAULT NULL COMMENT ‘今日营业额‘,
  `order_number_amount` int(11) DEFAULT NULL COMMENT ‘总订单数‘,
  `order_rmb_amount` decimal(12,2) DEFAULT NULL COMMENT ‘总营业额‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘每日报表‘;

说明:其实就是向这里面进行数据的更新与增加操作即可,每天进行报表的读取与显示

           不过有些网友提出采用缓存来处理,我个人的意见是不需要。数据也没那么多,而且都是定时器来执行,缓存的价值与意义很小。

 

相关的执行代码如下:

@Component
public class TaskReport {

    private static final Logger logger=LoggerFactory.getLogger(TaskReport.class);

    @Autowired
    private BuyerOrderReportService buyerOrderReportService;

    @Autowired
    private ReportDayService reportDayService;

    @Autowired
    private BillService billService;
    /**
     * 计算每天报表;
     *    每日上午6:00触发
     */
    @Scheduled(cron="0 0 6 * * ?")
    protected void day(){
        try{
            logger.info("TaskReport.day.start");
            //统计每天订单报表;
            Integer today = 0;//0表示今天    1表示昨天;
            reportDayService.insertBatch(today);
            //统计买家每日订单金额;
            buyerOrderReportService.insertBatch(today);
        }catch(Exception e){
            logger.error("TaskReport.day.exception",e);
        }finally {
            logger.info("TaskReport.day.end");
        }
        

2. 相关的报表的形状显示,目前折线图,柱状图是比较理想的一种方式,采用百度的echarts进行显示

相关的运行实例如下:

 

 补充说明:相关的echarts的用法,这边就不列举了,的确蛮简单的,返回json给echarts所需要的数据格式即可。

代码这里只贴出相对核心的代码:

public class IndexController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

    @Autowired
    private OrderInfoService orderInfoService;

    @Autowired
    private OrderItemService orderItemService;

    @Autowired
    private SalesService salesService;

    @Autowired
    private BuyerService buyerService;

    @Autowired
    private SellerService sellerService;

    @Autowired
    private ReportedService reportedService;

    @RequestMapping(value = "/index", method = { RequestMethod.GET, RequestMethod.POST })
    public String index(HttpServletRequest request, HttpServletResponse response, Model model, Long areaId) {

        logger.info("[IndexController][index] :查询订单统计数据");
        try {

            // 查询订单总数量和金额
            Map<String, Object> totalMap = orderInfoService.getCountAndAmount();
            int totalCount = (int) totalMap.get("count");
            BigDecimal totalAmount = (BigDecimal) totalMap.get("amount");
            if (totalAmount == null) {
                totalAmount = BigDecimal.ZERO;
            }
            // 查询今日的订单总数量和金额
            Map<String, Object> todayMap = orderInfoService.getOrderCountAndAmountByToday();
            int todayOrderCount = (int) todayMap.get("count");
            BigDecimal todayOrderAmount = (BigDecimal) todayMap.get("amount");
            if (todayOrderAmount == null) {
                todayOrderAmount = BigDecimal.ZERO;
            }

            // 查询实时的订单总数量和金额
            Map<String, Object> realTimeRevenueMap = orderInfoService.getRealTimeRevenueCount();
            int realTimeOrderCount = (int) realTimeRevenueMap.get("count");
            BigDecimal realTimeOrderAmount = (BigDecimal) realTimeRevenueMap.get("amount");
            if (realTimeOrderAmount == null) {
                realTimeOrderAmount = BigDecimal.ZERO;
            }

            // 入驻买家数量
            int totalBuyerCount = buyerService.getBuyerCount(null);
            // 当日注册买家数量
            int todayBuyercount = buyerService.getDailyBuyerCount();
            // 当日入驻卖家数量
            int todaySellerCount = sellerService.getDailySellerCount();

            model.addAttribute("totalCount", totalCount);
            model.addAttribute("totalAmount", totalAmount);
            model.addAttribute("todayOrderCount", todayOrderCount);
            model.addAttribute("todayOrderAmount", todayOrderAmount);
            model.addAttribute("totalBuyerCount", totalBuyerCount);
            model.addAttribute("todayBuyercount", todayBuyercount);
            model.addAttribute("todaySellerCount", todaySellerCount);
            model.addAttribute("realTimeOrderAmount", realTimeOrderAmount);
            model.addAttribute("realTimeOrderCount", realTimeOrderCount);

            // 查询今儿下单买家数量和空降A;
            int order_buyerCount = orderInfoService.getBuyerCountByTodayOrder();
            int newBuyerNum = orderInfoService.getBuyerNumByThatDay();
            model.addAttribute("order_buyerCount", order_buyerCount);
            model.addAttribute("newBuyerNum", newBuyerNum);
            Reported reported = new Reported();
            reported.setrSolveStatus(1);
            int count = reportedService.getCount(reported);
            model.addAttribute("count", count);
        } catch (Exception ex) {
            logger.error("[IndexController][index] :exception", ex);
        }
        return "index";
    }

3.对于卖家而言,我们的报表需要有以下几个维度来统计(统计最新的TOP的卖家)

        3.1   买家消费。

        3. 2  卖家收入

        3.3   热卖的菜品

        3.4   销售业绩

        3. 5  订单项最多的买家。

 

这里面也是些统计的数据,相对而言跟上面的买家维度差不多,代码方面也类似,无外乎需要的是多点数据库的查询与统计即可。

总结:其实整个报表的设计与实现过程并不难,难的是你为什么要这样设计,你通过这个运营的后台给整个项目的运营能够带来怎么样的用户体验与指导,

你需要通过数据来诊断这个销售团队过程中是否存在什么问题。有没什么刷单以及其他的作弊嫌疑在里面。

最后:很多人说系统功能很强大很好,但是我的一种思维方式是不一定,强大固然好,但是你需要通过这么多的系统数据中来分析出问题的关键,而不是所谓的代码堆积。

           你所需要的是思考,再思考,最终思考。

转载自-- https://www.cnblogs.com/jurendage/p/9108863.html

原文地址:https://www.cnblogs.com/lu-manman/p/10052358.html

时间: 2024-10-08 06:54:45

24、生鲜电商平台-系统报表设计与架构的相关文章

28、生鲜电商平台-库存管理设计与架构

说明:Java开源生鲜电商平台-库存管理设计与架构有以下几个功能 WMS的功能:1.业务批次管理 该功能提供完善的物料批次信息.批次管理设置.批号编码规则设置.日常业务处理.报表查询,以及库存管理等综合批次管理功能,使企业进一步完善批次管理,满足经营管理的需求. 2.保质期管理在批次管理基础上,针对物料提供保质期管理及到期存货预警,以满足食品和医yao行业的保质期管理需求.用户可以设置保质期物料名称.录入初始数据.处理日常单据,以及查询即时库存和报表等. 3.质量检验管理集成质量管理功能是与采购

Java开源生鲜电商平台-监控模块的设计与架构(源码可下载)

Java开源生鲜电商平台-监控模块的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux服务器的CPU,内存,磁盘IO等监控) 2. 业务系统的监控.  (比如:业务系统性能的监控,SQL语句的监控,请求超时的监控,用户输入的监控,整个请求过程时间的监控,优化等等) 1. 服务器本身的监控 说明:由于Java开源生鲜电商平台采用的是阿里云的linux CentOS服务器,由于阿里云本身

Java开源生鲜电商平台-通知模块设计与架构(源码可下载)

Java开源生鲜电商平台-通知模块设计与架构(源码可下载) 说明:对于一个生鲜的B2B平台而言,通知对于我们实际的运营而言来讲分为三种方式:           1. 消息推送:(采用极光推送)           2. 主页弹窗通知.(比如:现在有什么新的活动,有什么新的优惠等等)           3. 短信通知.(对于短信通知,这个大家很熟悉,我们就说下我们如何从代码层面对短信进行分层的分析与架构) 1. 消息推送 说明:目前市场上的推送很多,什么极光推送,环信,网易云等等,都可以实现秒

16、生鲜电商平台-监控模块的设计与架构

说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux服务器的CPU,内存,磁盘IO等监控) 2. 业务系统的监控.  (比如:业务系统性能的监控,SQL语句的监控,请求超时的监控,用户输入的监控,整个请求过程时间的监控,优化等等) 1. 服务器本身的监控 说明:由于Java开源生鲜电商平台采用的是阿里云的linux CentOS服务器,由于阿里云本身是有监控预警的,但是我们不可能时刻去看,最好有集成自己的系统监

23、生鲜电商平台-服务器部署设计与架构

补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. 买家端 2. 卖家端. 3. 销售端 4. 配送端. 5.系统运营端. 6.公司网址 目前根据业务的情况,采购了阿里云服务器,由于是创业,我身上没多少钱,只采购了一台阿里云.(具体配置如下与域名规划如下) 公司网址: http://www.netcai.com 买家端:  http://buyer.netcai.com 卖家端:  http:

32、生鲜电商平台-商品价格的设计与架构

说明:Java开源生鲜电商平台-商品价格的设计与架构,主要是对商品的价格进行研究与系统架构. 一.常见的电商价格 市场价(List Price):这个价格仅是用于显示,用于衬托网站销售价格的优惠程度: 销售价(Sales Price):亦称我们的价格.零售价等,如果没有任何优惠的(包括促销优惠.会员等级优惠等), 就按这个价格进行销售.所有的优惠规则均是基于这个价格进行计算. 特价(Special Price):优先级最高的定价,忽略所有的价格规则. SKU价格(SKU Price):同一个产品

21、生鲜电商平台-通知模块设计与架构

说明:对于一个生鲜的B2B平台而言,通知对于我们实际的运营而言来讲分为三种方式:           1. 消息推送:(采用极光推送)           2. 主页弹窗通知.(比如:现在有什么新的活动,有什么新的优惠等等)           3. 短信通知.(对于短信通知,这个大家很熟悉,我们就说下我们如何从代码层面对短信进行分层的分析与架构) 1. 消息推送 说明:目前市场上的推送很多,什么极光推送,环信,网易云等等,都可以实现秒级别的推送,我们经过了市场调研与稳定性考察,最终选择了极光推

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载)

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载) 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1.概述:在web项目中,服务端和前端经常需要交互数据,有的时候由于网络相应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的. 2.解决方法: ①前端处理:在提交之后通过js立即将按钮

Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 Nginx 2.3 应用服务器 Jdk7+ Tomcat 7 2.4 数据库 Mysql 5.6.x 2.5 消息队列(可选) Rabbitmq/rocketmq 2.6 缓存(可选) Redis 3.x 3.工程构建和管理工具 1.Maven 开发人员已经很熟悉了.此处略 2.Jenkins Je