Java開源生鮮電商平臺-團購模塊設計與架構(源碼可下載)

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

Java開源生鮮電商平臺-團購模塊設計與架構(源碼可下載) 說明:任何一個電商系統中,對於促銷這塊是必不可少的,畢竟這塊是最吸引用戶的,用戶也是最愛的模塊之一,理由很簡單,便宜。 我的經驗是無論是大的餐飲點還是小的餐飲店,優惠與折扣永遠是說福他們進入平臺的最好的手段之一。(大企業叫做節約成本,小企業 ...


Java開源生鮮電商平臺-團購模塊設計與架構(源碼可下載)

 

說明:任何一個電商系統中,對於促銷這塊是必不可少的,畢竟這塊是最吸引用戶的,用戶也是最愛的模塊之一,理由很簡單,便宜。

           我的經驗是無論是大的餐飲點還是小的餐飲店,優惠與折扣永遠是說福他們進入平臺的最好的手段之一。(大企業叫做節約成本,小企業叫做貪便宜.)

 

1.Java開源生鮮電商平臺中,團購模塊,我們採用以下幾種維度思考。

     1.1  針對的是生鮮中的標品。(米面糧油,我們要求買家可以自己發送團購,但是團購有次數,與時間以及買家起團金額和最低開團金額幾個維度)

因此,需要有一個團購基礎信息表:

 

CREATE TABLE `groups` (
  `group_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `group_no` varchar(32) DEFAULT NULL COMMENT '團號',
  `group_title` varchar(128) DEFAULT NULL COMMENT '團購標題',
  `group_logo` varchar(128) DEFAULT NULL COMMENT '團購logo',
  `group_area` varchar(128) DEFAULT NULL COMMENT '團購區域(區域ID集合)',
  `begin_time` datetime DEFAULT NULL COMMENT '開始時間',
  `end_time` datetime DEFAULT NULL COMMENT '結束時間',
  `max_num` int(11) DEFAULT NULL COMMENT '最大買家數',
  `buyer_amt` decimal(12,2) DEFAULT NULL COMMENT '買家起團金額',
  `min_amt` decimal(12,2) DEFAULT NULL COMMENT '最低開團金額',
  `group_status` tinyint(4) DEFAULT NULL COMMENT '狀態(1發佈 -1未發佈 2團成 3未團成)',
  `remarks` varchar(256) DEFAULT NULL,
  `create_user_id` bigint(20) DEFAULT NULL COMMENT '創建人',
  `create_time` datetime DEFAULT NULL COMMENT '創建時間',
  PRIMARY KEY (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='團購主表';

說明:這裡面有一個團購的狀態需要指明下,買家用戶選擇好幾樣商品後發起了團購,然後預設狀態為-1,表示不可用,等組成了團購,最終狀態會有團成的狀態。

 

2. 對於團購而言,系統肯定需要記錄,那些買家參與了那些團購,因此有以下的一張表記錄

 

CREATE TABLE `groups_buyer` (
  `gb_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `buyer_id` bigint(20) DEFAULT NULL COMMENT '買家ID',
  `group_id` bigint(20) DEFAULT NULL COMMENT '團購ID',
  `item_id` bigint(20) DEFAULT NULL COMMENT '團購明細ID',
  `order_id` bigint(20) DEFAULT NULL COMMENT '訂單ID',
  `gb_num` int(11) DEFAULT NULL COMMENT '團購數量',
  `gb_price` decimal(12,2) DEFAULT NULL COMMENT '團購價格',
  `gb_amt` decimal(12,2) DEFAULT NULL COMMENT '團購金額',
  `gb_status` tinyint(4) DEFAULT NULL COMMENT '狀態(1完成 -1取消)',
  `gb_time` datetime DEFAULT NULL COMMENT '團購時間',
  PRIMARY KEY (`gb_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='團購買家表';

說明:團購買家表,記錄那個買家,那個團購,團購的最終數量以及團購的價格等等,最終是否有買家在規定的時間內推出了團購,或者團購未形成等等。

 

3. 團購最終是對商品的規格進行團購。

   談談商品的規格繫數,我們知道蔬菜中有西紅柿對吧,那麼西紅柿分為兩種,一種是大紅的,一種是粉紅,這兩種顏色都是西紅柿,那麼系統會認為這個是兩個產品,而不是兩個規格,規格到底是說的什麼呢?

   對於平臺而言,規格就是一種商品的幾種售賣方式。

  最終根據業務分析,我們需要記錄團購是由那些明細組成.(商品規格組成)

 

因此,最終系統架構如下:

CREATE TABLE `groups_item` (
  `item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `group_id` bigint(20) DEFAULT NULL COMMENT '團購ID',
  `goods_id` bigint(20) DEFAULT NULL COMMENT '商品ID',
  `format_id` bigint(20) DEFAULT NULL COMMENT '商品規格ID',
  `group_price` decimal(12,2) DEFAULT NULL COMMENT '團購價格',
  `group_num` int(11) DEFAULT NULL COMMENT '團購數量',
  `item_status` tinyint(4) DEFAULT NULL COMMENT '狀態(1在用 -1停用)',
  `create_user_id` bigint(20) DEFAULT NULL COMMENT '創建人',
  `create_time` datetime DEFAULT NULL COMMENT '創建時間',
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='團購明細表';

 

業務總結:

           1. 存在 一個買家發起的團購申請記錄表。

           2. 後端會有一個審核機制,預設1個小時內審核通過。

           3. 團購會有商品的明細組成。也有時間段的範圍與有消息。

           4. 團購最終需要記錄那些人參與了,然後交費完成等等。

 

補充說明:業務代碼級別,無外乎提供給APP介面。以下幾種功能:

              1.  團購列表。

              2. 團購明細。

              3. 我的團購。

              4,我的取消團購等

     

/**
 * 團購Controller
 */
@RestController
@RequestMapping("/buyer")
public class GroupsController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(GroupsController.class);
    @Autowired
    private GroupsService groupsService;
    
    /**
     * 團購活動列表
     * @param request
     * @param response
     */
    @RequestMapping(value = "/groups/list", method = { RequestMethod.GET})
    public JsonResult groupsList(HttpServletRequest request, HttpServletResponse response,Long regionId) {
        try{
            if(null == regionId || 0 == regionId){
                return new JsonResult(JsonResultCode.FAILURE, "參數錯誤,請檢查regionId是否有傳","");
            }
            List<GroupsVo> cgList = groupsService.getGroupsList(regionId);
            return new JsonResult(JsonResultCode.SUCCESS, "查詢信息成功", cgList);
        }catch(Exception ex){
            logger.error("[GroupsController][groupsList] exception :",ex);
            return new JsonResult(JsonResultCode.FAILURE, "系統錯誤,請稍後重試","");
        }
    }
    
    /*
     * 團購活動詳情
     */
    @RequestMapping(value = "/groups/detail", method = { RequestMethod.GET })
    public JsonResult detailGroups(HttpServletRequest request, HttpServletResponse response,Long groupId) {
        try{
            if(null == groupId || 0 == groupId){
                return new JsonResult(JsonResultCode.FAILURE, "參數錯誤,請檢查groupId是否有傳","");
            }
            GroupsVo groupsVo = groupsService.getGroupsInfo(groupId);
            if(groupsVo == null){
                groupsVo = new GroupsVo();
            }
            return new JsonResult(JsonResultCode.SUCCESS, "查詢信息成功", groupsVo);
        }catch(Exception ex){
            logger.error("[GroupsController][detailGroups] exception :",ex);
            return new JsonResult(JsonResultCode.FAILURE, "系統錯誤,請稍後重試","");
        }
    }
    
    /**
     * 團購下單
     * @param request
     * @param response
     */
    @RequestMapping(value = "/groups/createOrder", method = { RequestMethod.POST })
    public JsonResult createOrder(HttpServletRequest request, HttpServletResponse response,
            @RequestBody GroupOrder groupOrder) {
        try {
            String time = groupOrder.getBestTime();
            if (StringUtils.isBlank(time)) {
                return new JsonResult(JsonResultCode.FAILURE, "訂單創建失敗,收貨時間不允許為空", "");
            }
            
            OrderInfo addOrderInfo = groupsService.addOrderInfo(groupOrder);
            if (addOrderInfo == null) {
                return new JsonResult(JsonResultCode.FAILURE, "創建訂單失敗,訂單金額小於起送價", "");
            }
            return new JsonResult(JsonResultCode.SUCCESS, "創建訂單成功", addOrderInfo);
        } catch (Exception ex) {
            logger.error("[GroupsController][createOrder] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系統錯誤,請稍後重試", "");
        }
    }
}

 

總結:目前Java開源生鮮電商平臺-團購模塊設計與架構只是針對的是很普通的一些團購手段,當然對於拼多多而言,差距還是很大的。

           這個也是跟業務形態有關,非技術有關,每一種促銷方案並不是適合左右的買家用戶或者說系統平臺本身的。

           由於時間關係或者說有關規定, APP運營截圖相對而言比較簡單,我這邊就不貼出來了。

          

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


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

-Advertisement-
Play Games
更多相關文章
  • 最近項目回歸使用jquery,頁面渲染全是使用jquery做的,所以做的時候也遇到了許多以前沒有見過的問題,如這次操作【radio】控制項的"checked"屬性時有遇到問題, $("...").attr("checked",false);無法起到作用,上網查了下使用prop()完美的解決了該問題,特 ...
  • 內容:回調函數;阻塞/同步、非阻塞、和非同步區別;阻塞和非阻塞代碼實例 Node.js 回調函數Node.js 非同步編程的直接體現就是回調。非同步編程依托於回調來實現,但不能說使用了回調後程式就非同步化了。回調函數在完成任務後就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支持回調函 ...
  • 使用背景: 為什麼使用: 定義: 為什麼選擇兩根連詞線(--)表示變數? 用法: 作用域: 使用:root 作用域來定義全局變數: 如果想讓某個變數只在部分元素/組件下可見,只需要在特定的元素下定義該變數: 媒體查詢也可以提供作用域: 下麵一個例子來展示偽類下的作用域(例如,:hover): ...
  • 最近兄弟團隊讓我去幫忙優化兩個頁面,前端用的react全家桶,後端用的python,上一次寫react代碼都過去一年了,順著以前的的學習思路,再捋順一下react的要點 組件的生命周期就是Reac的工作過程,就好比人有生老病死,自然界有日月更替,每個組件在網頁中也會有被創建、更新和刪除,如同有聲明的 ...
  • 可以利用js中函數的閉包進行封裝 通常我們可以用下麵這種方法進行一個封裝,這樣在外部引入我們寫的這個js文件後,就可以直接使用export.getUserId()這種形式去調用該函數 上面寫法等價於下麵這一種,下麵可能更易於理解,但都差不多,這樣就進行了封裝然後在其他地方就可以通過window的全局 ...
  • 工廠方法模式 簡單工廠類 簡單工廠模式屬於創建型模式,又稱靜態工廠方法(Static factory method)模式。其是由一個工廠對象決定創建出哪一種產品類的實例,可理解為不同工廠模式的一個特殊實現。 上述代碼對於修改開放了,違反了開放封閉原則。故而引出工廠方法模式,去解決這樣的矛盾。 GOF ...
  • 引言 之前就瞭解過kafka,看的似懂非懂,最近項目組中引入了 "kafka" ,剛好接著這個機會再次學習下。 Kafka在很多公司被用作分散式高性能消息隊列,kafka之前我只用過redis的list來做簡單的隊列處理,也還算好用,可能數據量比較小,也是單機運行,未出現過問題,用作輕量級消息隊列還 ...
  • 將springMVC進行了進一步的封裝。讓開發者更容易。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...