Java開源生鮮電商平臺-系統報表設計與架構(源碼可下載)

来源:https://www.cnblogs.com/jurendage/archive/2018/05/30/9108863.html
-Advertisement-
Play Games

Java開源生鮮電商平臺-系統報表設計與架構(源碼可下載) 說明:任何一個運行的平臺都需要一個很清楚的報表來顯示,那麼作為Java開源生鮮電商平臺而言,我們應該如何設計報表呢?或者說我們希望報表來看到什麼數據呢? 通過報表我們可以分析出目前整個公司的運營情況,以及下一步的調整方向,這樣更加有理有據的 ...


Java開源生鮮電商平臺-系統報表設計與架構(源碼可下載)

 

說明:任何一個運行的平臺都需要一個很清楚的報表來顯示,那麼作為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  訂單項最多的買家。

 

   

 

 這裡面也是些統計的數據,相對而言跟上面的買家維度差不多,代碼方面也類似,無外乎需要的是多點資料庫的查詢與統計即可。

 

總結:其實整個報表的設計與實現過程並不難,難的是你為什麼要這樣設計,你通過這個運營的後臺給整個項目的運營能夠帶來怎麼樣的用戶體驗與指導,

            你需要通過數據來診斷這個銷售團隊過程中是否存在什麼問題。有沒什麼刷單以及其他的作弊嫌疑在裡面。

 

最後:很多人說系統功能很強大很好,但是我的一種思維方式是不一定,強大固然好,但是你需要通過這麼多的系統數據中來分析出問題的關鍵,而不是所謂的代碼堆積。

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

 

 Java開源生鮮電商平臺-系統報表設計與架構(源碼可下載),如果需要下載的話,可以在我的github下麵進行下載。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript具有強大的垃圾回收功能,執行環境負責管理代碼執行過程中使用的記憶體。其基本原理是:在執行環境中找出那些不再繼續使用的變數,然後釋放其占用的記憶體。垃圾收集器會按照系統編寫號的時間間隔,周期性地執行操作。 局部變數的生命周期 一個函數中局部變數正常生命周期,局部變數只在函數執行的過程中 ...
  • 上圖不上種,菊花萬人捅: loading.js: loading.css: 在main.js裡面 : 這樣就可以直接在組件裡面手動調用啦! 調用方法: this.$loading.show(), this.$loading.hide() 因為這個項目暫時規模很小,就只有註冊功能,我直接把調用寫在ax ...
  • 採用Flex佈局的元素,被稱為Flex容器(flex container),簡稱"容器"。其所有子元素自動成為容器成員,成為Flex項目(Flex item),簡稱"項目" Flex-direction調整主軸方向(預設為水平方向)包括row、column、row-reverse、column-re... ...
  • 回頭再詳細完善 ...
  • 簡介: 為其他對象提供一種代理以控制對這個對象的訪問。(在訪問真實對象時,引入一定程度的間接性,因為這種間接性可以附加多種用途)【結構型模式】 結構圖: 優點: 缺點: 應用場景: 註意事項: 示例: 1.結構類圖的實現: ISubject類,定義了RealSubject和Proxy的公用介面。在任 ...
  • 領域驅動設計(2)怎麼使用溝通 廢話 溝通的重要性:溝通很重要,不論在生活中,還是工作中溝通處理不好,我想為人處事這塊肯定有問題.LZ接觸社會比較早,做過焊工、銷售、跑過業務...,一路走來在溝通上同樣的也吃過很多的虧,受了不少的不會溝通的害處。我在做業務的時候常常用一句話告誡自己“一句話能死,一句 ...
  • 簡介: 動態的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生產子類更加靈活——《大話設計模式》。【結構型模式】 結構圖: 優點: 缺點: 應用場景: 註意事項: 示例: 1.結構類的實現: Component定義一個對象介面,可以給這些對象動態的添加職責。 ConcreteCompone ...
  • 我們的對象並不只是存在記憶體中,還需要傳輸網路,或者保存起來下次再載入出來用,所以需要Java序列化技術。Java序列化技術正是將對象轉變成一串由二進位位元組組成的數組,可以通過將二進位數據保存到磁碟或者傳輸網路,磁碟或者網路接收者可以在對象的屬類的模板上來反序列化類的對象,達到對象持久化的目的。 如果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...