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運營截圖相對而言比較簡單,我這邊就不貼出來了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM