1. 程式人生 > >微信點餐系統技術總結

微信點餐系統技術總結

1.角色劃分

      買家端(手機端)  賣家端(PC)

2.功能模組劃分

      詳細設計個各個功能模組

        買家         賣家

   商品商品列表資料

   訂單訂單建立  訂單查詢 訂單取消 ...

   類目訂單管理   商品管理 類目管理 ...

2.架構和基礎框架

 SSH 框架的瞭解和使用

 Mybatis 的兩種配置方法

 Redis 的快取作用 分散式鎖

 Aop 身份驗證 

 等等

      設計表的成員   表與表之間的關係  確定每個表的主鍵 設計屬性之間的關聯...

這裡用Slf4j

1.匯入依賴

<dependency>    <groupId>

org.projectlombok</groupId>    <artifactId>lombok</artifactId></dependency>

2.加上註解

@Slf4j

3..使用

log.error("【建立訂單】購物車不能為空");

log.info("【微信支付】發起支付request={}",JsonUtil.toJson(payRequest));

logging:  pattern:    console: "%d - %msg%n"path: /var/log/tomcat/file: /var/log/tomcat/sell.loglevel:    com.imooc.LoggerTest: 

debug

path 和 file 二選一即可

Path:產生檔案的位置

File:產生檔案的位置和名字

Level: 指定某個類的日誌級別

Resouces目錄下建立 Logback-spring.xml配置檔案

<?xml version="1.0" encoding="UTF-8" ?><configuration>    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">        <layout class="ch.qos.logback.classic.PatternLayout"

>            <pattern>%d - %msg%n</pattern>        </layout>    </appender>    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">        <filter class="ch.qos.logback.classic.filter.LevelFilter">            <level>ERROR</level><!--<onMatch>DENY</onMatch>            <onMismatch>ACCEPT</onMismatch>--></filter>        <encoder>            <pattern>%msg%n</pattern>        </encoder><!--滾動策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路徑 --><fileNamePattern>/home/hk/log/tomcat/info.%d.log</fileNamePattern>        </rollingPolicy>    </appender>    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            <level>ERROR</level>        </filter>        <encoder>            <pattern>%msg%n</pattern>        </encoder><!--滾動策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路徑 --><fileNamePattern>/home/hk/log/tomcat/error.%d.log</fileNamePattern>        </rollingPolicy>    </appender>    <root level="info">        <appender-ref ref="consoleLog"/>        <appender-ref ref="fileInfoLog"/>        <appender-ref ref="fileErrorLog"/>    </root></configuration>

簡單的日誌需求選擇第一種即可,複雜的需要選擇第二種配置

注意這裡寫配置檔案時提示不是很友好,不要打錯!

6. 買家類目

1.資料庫的連線:

 新增依賴:

Mysql的驅動

<dependency>   <groupId>mysql</groupId>   <artifactId>mysql-connector-java</artifactId></dependency>

Jap的驅動

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-jpa</artifactId></dependency>

配置資料庫的資訊:

在application.yml配置檔案中`配置

spring:  datasource:    driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 741623url: jdbc:mysql://127.0.0.1:3306/food?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNulljpa:    show-sql: true

2.建立和資料表對映過來對應的物件

物件類需要加入

@Entity 註解

匯入包 import javax.persistence.Entity

預設下類名和表明一致

類名中除了第一個字母,其他字母的大寫在表中會自動用_加對應的小寫字母替代

 表名: product_category 

 類名:ProductCategory

也可以加註解來新增對映關係

@Table(name = “ product_category”)

物件裡面的屬性名也必須和資料表裡面的屬性名對應

否則需要在屬性之前添加註解@Column(name = 屬性名)

物件的主鍵用 @Id 標識  匯入下面的包

import javax.persistence.Id;

物件自增用  @GeneratedValue 表示

import javax.persistence.GeneratedValue;

若類名和屬性名都與資料表對應則這個類就和 product_category資料表建立對映關係.

注意建議用預設值 

類名前面新增 @Data

匯入包import lombok.Data;

依賴檔案和之前日誌的依賴一樣

這個註解可以省去 get 和 set 方法

DAO 層的編寫

與物件做關聯

public interface ProductCategoryRepository extends JpaRepository<ProductCategoryInteger>

繼承介面 JpaRepository<>  第一個引數表明物件類的名稱 第二個引數表明物件的主鍵   

1.先建立CategoryService介面

在介面中列出可能需要用的方法

再建立CategoryServiceImpl類實現介面 CategoryService

在 CategoryServiceImpl 需要加入註解 @Service

匯入包import org.springframework.stereotype.Service;

由於類目不存在單獨給買家端的介面,所以不存在 controller

7.買家商品

基本步驟和上面買家類目實現一樣

注重Service的編寫

Dao  ---> Service   ---> Controller

------------------技術技巧------------------------------------------------

查詢的時候傳入 Pageable pageable物件可以分頁查詢

Page<ProductInfo> findAll(Pageable pageable);

匯入包 import org.springframework.data.domain.Pageable;

傳入Pageable pageable物件 返回的時一個 Page<>物件

當用數字表示一些商品的情況或者訂單的情況時,一旦數目過多就容易混淆,

這時候可以用到列舉類  Enum, 可以建立一個單獨的包來管理各個列舉類

列舉類可以將對應的數字資訊和和文字資訊結合起來,可以更加方便的瞭解數字對應的資訊

package com.imooc.enums;import lombok.Getter;/** * 商品狀態* Created by 廖師兄* 2017-05-09 17:33 */@Getterpublic enum ProductStatusEnum implements CodeEnum {UP(0"在架"),DOWN(1"下架");    private Integer code;    private String message;ProductStatusEnum(Integer codeString message) {this.code = code;        this.message = message;}}

返回給前端的類目資訊分三層結構

1. 最外層(ResultVO<T>): 包含code(錯誤碼) , msg(提示資訊) , 泛形 T(包含返回的具體資訊)

package com.imooc.VO;import lombok.Data;/** * http請求返回的最外層物件* Created by 廖師兄* 2017-05-12 14:13 */@Datapublic class ResultVO<T> {/** 錯誤碼. */private Integer code;/** 提示資訊. */private String msg;/** 具體內容. */private data;}

2.中間層(ProductVO): 商品類目資訊,包含 類目名字 類目編號 商品資訊 List  (裡面包含屬於這個類目的商品資訊).

package com.imooc.VO;import com.fasterxml.jackson.annotation.JsonProperty;import lombok.Data;import java.util.List;/** * 商品(包含類目) * Created by 廖師兄* 2017-05-12 14:20 */@Datapublic class ProductVO {@JsonProperty("name")private String categoryName;@JsonProperty("type")private Integer categoryType;@JsonProperty("foods")private List<ProductInfoVO> productInfoVOList;}

3.最裡層(ProductInfoVO): 商品詳情包含使用者能看到的商品資訊 )

package com.imooc.VO;import com.fasterxml.jackson.annotation.JsonProperty;import lombok.Data;import java.math.BigDecimal;/** * 商品詳情* Created by 廖師兄* 2017-05-12 14:25 */@Datapublic class ProductInfoVO {@JsonProperty("id")private String productId;@JsonProperty("name")private String productName;@JsonProperty("price")private BigDecimal productPrice;@JsonProperty("description")private String productDescription;@JsonProperty("icon")private String productIcon;}

1.查詢所有上架商品 

2.查詢類目(一次性查詢)

這裡用到一個 lambda 表示式(從商品物件中獲得類目屬性)

List<Integer> categoryTypeList = productInfoList.stream()        .map(e -> e.getCategoryType())        .collect(Collectors.toList());

作用是從 物件集合productInfoList中抽取一個屬性集合 categoryTypeList

作用等價於:

List<Integer> categoryTypeList = new ArrayList<>();傳統方法for (ProductInfo productInfo : productInfoList) {    categoryTypeList.add(productInfo.getCategoryType());}

根據獲得的類目type屬性集合來得到類目物件集合

List<ProductCategory> productCategoryList = categoryService.findByCategoryTypeIn(categoryTypeList);

3.資料拼裝(將對應的商品物件新增到對應的類目List下去)

新建一個ProductVO(商品類目資訊包含 類目名字 類目編號 商品資訊 List )的 List

List<ProductVO> productVOList = new ArrayList<>();

對類目物件集合迴圈遍歷

for (ProductCategory productCategory: productCategoryList) {

新建一個ProductVO物件

設定CategoryType和CategoryName 屬性值

ProductVO productVO = new ProductVO();productVO.setCategoryType(productCategory.getCategoryType());productVO.setCategoryName(productCategory.getCategoryName());

新建一個 ProductInfoVO 的List --->roductInfoVOList

List<ProductInfoVO> productInfoVOList = new ArrayList<>();

在類目迴圈體內部對商品資訊金額和迴圈遍歷

for (ProductInfo productInfo: productInfoList) {

If 判斷 若滿足商品物件的類目屬性與當前類目物件的類目屬性相同

if (productInfo.getCategoryType().equals(productCategory.getCategoryType())) {

滿足上述 if 判斷則新建一個 productInfoVO 物件

運用工具類BeanUtils中的copyProperties()方法將productInfo中的屬性值拷貝到productInfoVO物件中(拷貝的值包括兩個物件中名字和型別一樣的屬性)

ProductInfoVO productInfoVO = new ProductInfoVO();BeanUtils.copyProperties(productInfoproductInfoVO);productInfoVOList.add(productInfoVO);

設定 productVO 的 ProductInfoVOList  的值為 productInfoVOList        

productVO.setProductInfoVOList(productInfoVOList);

將   productVO  新增到  productVOList           

productVOList.add(productVO);

Dao  --- service  --- controller

都是相關邏輯的處理  不一一列舉了

涉及兩張資料表(訂單使用者資訊表 和訂單商品詳情表)

DAO層 

訂單表介面的方法

Page<OrderMaster> findByBuyerOpenid(String buyerOpenidPageable pageable);

訂單詳情表介面的方法

List<OrderDetail> findByOrderId(String orderId);

買家訂單的service介面的方法

/** 建立訂單. */OrderDTO create(OrderDTO orderDTO);/** 查詢單個訂單. */OrderDTO findOne(String orderId);/** 查詢訂單列表. */Page<OrderDTO> findList(String buyerOpenidPageable pageable);/** 取消訂單. */OrderDTO cancel(OrderDTO orderDTO);/** 完結訂單. */OrderDTO finish(OrderDTO orderDTO);/** 支付訂單. */OrderDTO paid(OrderDTO orderDTO);/** 查詢訂單列表. */Page<OrderDTO> findList(Pageable pageable);

JSON格式轉化為 List

匯入依賴

<dependency>   <groupId>com.google.code.gson</groupId>   <artifactId>gson</artifactId></dependency>

Json格式的 orderForm.getItems()     轉化為   List<OrderDetail> 

Gson gson = new Gson();

orderDetailList = gson.fromJson(orderForm.getItems(),        new TypeToken<List<OrderDetail>>() {        }.getType());

9.獲得微信授權

必須時服務號才能進行微信相關介面開發,訂閱號不行

1.手動造輪子

1.設定域名

2.獲取 code(code作為換取access_token的票據,每次使用者授權帶上的code不一樣,code只能使用一次,5分鐘未使用自動過期).

3.通過code 獲得網頁受權access_token

2.微信網頁授權的第三方SDK

這裡是可能是目前最好最全的微信Java開發工具包(SDK

包括微信支付、開放平臺、公眾號、企業微信、企業號、小程式等

新增Maven引用

注意:以下為最新正式版,最新測試版本號為 

<dependency>

  <groupId>com.github.binarywang</groupId>

  <artifactId>(不同模組參考下文)</artifactId>

  <version>2.9.0</version>

</dependency>

· 各模組的artifactId: 

o 微信小程式:weixin-java-miniapp

o 微信支付:weixin-java-pay

o 微信開放平臺:weixin-java-open

o 公眾號:weixin-java-mp

o 企業號/企業微信:weixin-java-cp

8.微信支付

:由於沒有服務號,這一塊沒有研究

1.微信發起支付(後端)

2.在網頁發起支付

3.動態注入引數發起支付

4.微信非同步通知

5.微信退款

9.賣家訂單

   --->service ----->controller

由於之前買家端寫了很多程式碼了,其中與資料互動的dao層在賣家端不用寫了

1.Service層(重用買家訂單的service層介面)

/** 建立訂單. */OrderDTO create(OrderDTO orderDTO);/** 查詢單個訂單. */OrderDTO findOne(String orderId);/** 查詢訂單列表. */Page<OrderDTO> findList(String buyerOpenidPageable pageable);/** 取消訂單. */OrderDTO cancel(OrderDTO orderDTO);/** 完結訂單. */OrderDTO finish

相關推薦

系統技術總結

1.角色劃分      買家端(手機端)  賣家端(PC端)2.功能模組劃分      詳細設計個各個功能模組        買家         賣家   商品: 商品列表資料   訂單: 訂單建立  訂單查詢 訂單取消 ...   類目: 訂單管理   商品管理 類目管理

Spring Boot企業系統-第一章-課程介紹

win maven 開發環境 ast 介紹 前端 pri 系統 詳細說明 一、項目簡介——技術要點 前端和後端: 後端主要技術: 微信接口技術 微信支付 微信掃碼登錄 微信模板消息推送 開發環境 但實際上我用的環境和這上面還是有點不一樣,我服務器用的是win,到

Spring Boot系統

Spring Boot企業微信點餐系統 推薦視訊連結 Java 微服務實踐視訊教程 - Spring Boot Java 微服務實踐 視訊教程- Spring Cloud redis高可用視訊 分散式電商商城視訊教程 kubernets+docer

企業系統讀後感 mysql中utf8和utf8mb4區別

1:架構示例圖 2:mysql中utf8和utf8mb4區別     那上面說了既然utf8能夠存下大部分中文漢字,那為什麼還要使用utf8mb4呢? 原來mysql支援的 utf8 編碼最大字元長度為 3 位元組,如果遇到 4 位元組的寬字元就會插入異常了。三個位元組的 UTF-

基於Springboot+SpringCloud的系統開發視頻教程

技術 pri 是我 o2o cloud 根據 redis 我們 分享 基於Springboot+SpringCloud的微信點餐系統開發視頻教程課程分享鏈接:https://pan.baidu.com/s/1q7h9zn8sGf_e0k38pc69tw 密碼:fk9w 隨

Spring Boot系統視訊教程免費下載

Spring Boot企業微信點餐系統 第1章 課程介紹  包括項演示、課程概述、課程安排、學習前提等的介紹, 讓同學們瞭解這課程 第2章 專案設計  包括需求分析,項⽬目設計,項⽬目架構,資料庫設計等等。 第3章 專案起步  詳細介紹開發環境的搭建,日誌的使用和配

SpringBoot系統—2、開發環境的搭建,3、新建專案

2.1匯入已裝好的虛擬機器,需要安裝virtual box(報記憶體不能writen錯誤,後面使用VMware) 2.2虛擬機器說明文件 2.3網路配置 橋接網路→全部允許 保證虛擬機器與本機ping的通 2.4試試虛擬機器中的應用 2.4.1

SpringBoot 系統學習記錄六-訂單表和訂單詳情表的後端開發

在dataobject資料夾建立訂單表和訂單詳情表的實體類 package com.imooc.dataobject; import com.imooc.enums.OrderStatusEnum; import com.imooc.enums.PayStatusEnum; impor

系統(一)-系統簡介

session spring info cal vue.js edi rap 點餐系統 lib 系統簡介: 微信點餐系統是一個前後端分離的系統前端是使用Vue.js構建的WebApp,後端使用Springboot打造,後端的前臺頁面使用Bootstrap+Freemarke

系統(三)-開發環境配置

name mir 網絡配置 8.0 本地 ava 查看 col rem 開發環境配置: 虛擬機是課程提供的,裏面軟件都已經配置好 虛擬機配置: 虛擬機說明文檔 VitualBix-6.0.0 虛擬機系統 centos7.3 賬號 root 密碼123456 包括

系統感悟(上1-6章)

系統 去掉 Pageable 數據結構 ctc 實現類 異常 自定義 截圖 小結感悟 1.首先完成了一個階段,對所有的Api進行了分析與實現 2.項目開始時說的技術只實現了SpringBoot+jpa的數據庫實現和RESTful風格接口實現前後端的數據連通 3.項目實現的四

系統(九)-賣家端訂單

微信點餐系統 簡單選擇 message 忽略 修改 感悟 col turn border 章節感悟 1.使用ibootstrap進行前端界面樣式簡單選擇 2.如果設置對某種功能的工具類,裏面涉及到某個類,這個類一定要高度抽象 3.freemarke的簡單使用(循環,判斷)

系統(十)-賣家端通用功能和上下架

獲取 微信 語法 family 項目 erp rollback 沒有 strong 章節感悟 1.使用freemarke的包含語句 2.復制的代碼需要仔細檢查才能使用 賣家端通用功能和上下架 1.實現邊欄(通用界面公用) 1)將給好的邊欄放入項目中,並且響應css一起放入項

SpringBoot企業系統

專案目錄 | |--買家端類目 | 買家類目-dao(上) | 買家類目-dao(下) | 買家類目-service | |--買家端商品 | 買家商品-dao | 買家商品-service | 買家商品-api(上) | 買家商品-

廖師兄 Spring Boot 企業系統

開發十年,就只剩下這套架構體系了! >>>   

學習後的一些命令總結

壓測命令: apache ab ab -n 100 -c 100 http://192.168.0.1 ab -t 60 -c 200 http://192.168.0.1 maven 打包命令: maven clean package -Dmaven.test.skip=tru

】-- 登入登出(分散式系統下的session理論)

  傳統後臺管理,在初始化時會在資料中插入超級管理員的初始使用者使用者名稱和密碼,後續超級管理員通過介面新增普通管理人員的使用者名稱和密碼,普通使用者再在登入介面輸入使用者名稱和密碼完成登入。   由於賣家端涉及到的人員定位較少,微信的相關特性為重點。因此微信

訂餐系統

  經過幾天的開發、測試微信點餐demo終於完成了,特在此分享下,不好的地方請大家多指正下哈!一開始,就想這東西出來這麼久了,網上應該有很多現成的東西,於是,baidu、google了半天,基本沒發現現成的東西,也許是我搜索不得其道,也有可能大家都不願意分享吧...於是,還

小程序怎麽弄的?

微信點餐小程序 點餐收銀系統 微信小程序點餐系統它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點餐下單,從而節省

你還不知道小程序怎麽弄嗎?

微信點餐小程序 微信點餐系統 “微信小程序點餐系統”它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點餐下單,從而節