1. 程式人生 > 其它 >穀粒商城分散式基礎(三)—— 開發配置統一 & 服務構建

穀粒商城分散式基礎(三)—— 開發配置統一 & 服務構建

四、開發環境統一 & 服務搭建

1、IDEA配置統一

  注意:關於idea的安裝破解和基礎資訊這裡就不做介紹了

1、本地開發jdk和maven環境測試
  注意:關於本地環境的jdk和maven環境配置這裡就不介紹了
2、idea中按照以下步驟配置maven
    Settings—>Buid,Execution,Deployment—>Build Tools—>Maven
3、idea中安裝 lombox 和 mybatisx 外掛

2、VsCode配置統一

  注意:關於vscode的安裝這裡就不做介紹了

1、vscode安裝開發必備外掛
  (
1)Vetur —— 語法高亮、智慧感知、Emmet 等,包含格式化功能, Alt+Shift+F (格式化全文),Ctrl+K Ctrl+F(格式化選中程式碼,兩個 Ctrl 需要同時按著)
  (2)
EsLint —— 語法糾錯
  (3)Auto Close Tag —— 自動閉合 HTML/XML 標籤
  (4)Auto Rename Tag —— 自動完成另一側標籤的同步修改
  (5)JavaScript(ES6) code snippets — — ES6語法智慧提示以及快速輸入,除js外還支援.ts,.jsx,.tsx,.html,.vue,省去了配置其支援各種包含 js 程式碼檔案的時間
  (6)HTML CSS Support —— 讓 html 標籤上寫 class 智慧提示當前專案所支援的樣式
  (7)HTML Snippets —— html 快速自動補全
  (8)Open in browser —— 瀏覽器快速開啟
  (9)Live Server —— 以內嵌伺服器方式開啟
  (10)Chinese (Simplified) Language Pack for Visual Studio Code —— 中文語言包

3、安裝配置git

1、下載git
    https://git-scm.com
    注意:傻瓜式安裝,這裡就不再介紹了
2、配置git,進入 git bash 
 (
1)配置使用者名稱   git config --global user.name "username" //(名字)
 (2)
配置郵箱
    git config --global user.email "[email protected]" //(註冊賬號時用的郵箱)
3、配置ssh免密登入
  Gitee 提供了基於SSH協議的Git服務,在使用SSH協議訪問倉庫之前,需要先配置好賬戶/倉庫的SSH公鑰。 官方教程:https:
//gitee.com/help/articles/4181#article-header0
 (1)進入git bash,使用以下命令來生成 sshkey:
    
ssh-keygen -t rsa -C "[email protected]"
  按照提示完成三次回車,即可生成 ssh key

  一般使用者目錄下會有

  或者cat ~/.ssh/id_rsa.pub

  (2)登入gitee,複製生成後的 ssh key,通過倉庫主頁「管理」->「部署公鑰管理」->「新增部署公鑰」 ,新增生成的 public key 新增到倉庫中

  (3)新增完成之後,在終端(Terminal)中輸入

    ssh -T [email protected]

    首次使用需要確認並新增主機到本機SSH可信列表。若返回Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access.內容,則證明新增成功。

  新增成功後,就可以使用SSH協議對倉庫進行操作了。

  Git+碼雲教程 https://gitee.com/help/articles/4104

4、建立專案微服務

  建立五個微服務模組:商品服務、倉儲服務、訂單服務、優惠券服務、使用者服務

1、git初始化專案
 (1)從gitee初始化一個專案

  建立完畢後

2、ideal拉取碼雲專案
  開啟idea,File -> New -> Project from Version Control -> Git 貼上git倉庫的http地址

  初次登入,Windows安區中心彈出登入認證視窗

  git完畢之後,效果如下:

3、建立商品服務模組
 (1)右鍵專案 New -> Module -> 選擇Spring Initinalizr
  注意:Module SDK 要選擇自己配置的jdk1.8版本

 (2)選擇微服務必要元件,勾選如下元件,下一步

    (a)Web ——> Spring Web

    (b)Spring Cloud Routing ——> OpenFeign

  (3)Finish 完畢後

4、分別建立其他服務模組
    依次建立其他四個微服務模組,倉儲服務、訂單服務、優惠券服務、使用者服務,他們之間的共同點是:
    1)共同元件:web、openfeign 
    2)每一個服務,包名 com.atguigu.gulimall.xxx(product/order/ware/coupon/member) 
    3)模組名:gulimall-order/ware/coupon/member
  全部建立完畢之後
5、設定gulimall為專案總工程
 (1)隨便從一個Module中複製一個pom.xml到guilimall中
 (2)修改gulimall的pom.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall</name>
<description>聚合服務</description>
<packaging>pom</packaging>
<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
</modules>
</project>

 (3)將總服務新增進maven

  新增完成後

6、修改總專案的git的ignore模板
  (1)修改gulimall的.gitignore檔案,設定忽略檔案,把小專案裡的垃圾檔案在提交的時候忽略掉
    target/
    pom.xml.tag
    pom.xml.releaseBackup
    pom.xml.versionsBackup
    pom.xml.next
    release.properties
    dependency-reduced-pom.xml
    buildNumber.properties
    .mvn/timing.properties
    # https://github.com/takari/maven-wrapper#usage-without-binary-jar
    .mvn/wrapper/maven-wrapper.jar

    **/mvnw
    **/mvnw.cmd

    **/.mvn
    **/target

    .idea

    **/.gitignore

    **/README.md
 (2)刪除子模組的.gitignore檔案
 (3)將剩餘的檔案Unversioned Files 檔案納入版本控制
    右鍵 Unversioned Files 選擇 Add to VCS
7、提交程式碼到碼雲
  (1)安裝碼雲外掛

  安裝完成後需要重啟ideal

  (2)右鍵commit提交程式碼到本地倉庫

  (3)檢視碼雲倉庫

5、資料庫初始化

1、啟動docker服務,並且設定自啟動
  如果你是完全按照我的整個流程來的,其實這個時候docker和mysql已經是啟動的,前面已經設定過自啟動,這裡我們再操作複習一下
2、檢視資料庫設計結構
 (1)安裝並破解軟體PowerDesigner165
    安裝完畢之後開啟 gmall_資料庫設計.pdm 檢視資料庫設計結構

 (2)總共五個資料庫,檢視各個庫的設計結構

  (a)使用者資料庫

  (b)商品資料庫

  (c)庫存管理資料庫

  (d)優惠/營銷資料庫

  (e)訂單資料庫

3、建立資料庫
  使用客戶端工具navicat,字符集選utf8mb4,他能相容utf8且能解決一些亂碼的問題,分別建立下面的資料庫
    gulimall_oms —— 訂單服務
    gulimall_pms —— 商品服務
    gulimall_sms —— 優惠券服務
    gulimall_ums —— 使用者服務
    gulimall_wms —— 倉儲服務
  所有的資料庫資料再複雜也不建立外來鍵,因為在電商系統裡,資料量大, 做外來鍵關聯很耗效能。

(1)資料庫gulimall_oms(訂單服務),執行sql檔案 gulimall-oms.sql

drop table if exists oms_order;

drop table if exists oms_order_item;

drop table if exists oms_order_operate_history;

drop table if exists oms_order_return_apply;

drop table if exists oms_order_return_reason;

drop table if exists oms_order_setting;

drop table if exists oms_payment_info;

drop table if exists oms_refund_info;

/*==============================================================*/
/* Table: oms_order                                             */
/*==============================================================*/
create table oms_order
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   order_sn             char(32) comment '訂單號',
   coupon_id            bigint comment '使用的優惠券',
   create_time          datetime comment 'create_time',
   member_username      varchar(200) comment '使用者名稱',
   total_amount         decimal(18,4) comment '訂單總額',
   pay_amount           decimal(18,4) comment '應付總額',
   freight_amount       decimal(18,4) comment '運費金額',
   promotion_amount     decimal(18,4) comment '促銷優化金額(促銷價、滿減、階梯價)',
   integration_amount   decimal(18,4) comment '積分抵扣金額',
   coupon_amount        decimal(18,4) comment '優惠券抵扣金額',
   discount_amount      decimal(18,4) comment '後臺調整訂單使用的折扣金額',
   pay_type             tinyint comment '支付方式【1->支付寶;2->微信;3->銀聯; 4->貨到付款;】',
   source_type          tinyint comment '訂單來源[0->PC訂單;1->app訂單]',
   status               tinyint comment '訂單狀態【0->待付款;1->待發貨;2->已發貨;3->已完成;4->已關閉;5->無效訂單】',
   delivery_company     varchar(64) comment '物流公司(配送方式)',
   delivery_sn          varchar(64) comment '物流單號',
   auto_confirm_day     int comment '自動確認時間(天)',
   integration          int comment '可以獲得的積分',
   growth               int comment '可以獲得的成長值',
   bill_type            tinyint comment '發票型別[0->不開發票;1->電子發票;2->紙質發票]',
   bill_header          varchar(255) comment '發票抬頭',
   bill_content         varchar(255) comment '發票內容',
   bill_receiver_phone  varchar(32) comment '收票人電話',
   bill_receiver_email  varchar(64) comment '收票人郵箱',
   receiver_name        varchar(100) comment '收貨人姓名',
   receiver_phone       varchar(32) comment '收貨人電話',
   receiver_post_code   varchar(32) comment '收貨人郵編',
   receiver_province    varchar(32) comment '省份/直轄市',
   receiver_city        varchar(32) comment '城市',
   receiver_region      varchar(32) comment '',
   receiver_detail_address varchar(200) comment '詳細地址',
   note                 varchar(500) comment '訂單備註',
   confirm_status       tinyint comment '確認收貨狀態[0->未確認;1->已確認]',
   delete_status        tinyint comment '刪除狀態【0->未刪除;1->已刪除】',
   use_integration      int comment '下單時使用的積分',
   payment_time         datetime comment '支付時間',
   delivery_time        datetime comment '發貨時間',
   receive_time         datetime comment '確認收貨時間',
   comment_time         datetime comment '評價時間',
   modify_time          datetime comment '修改時間',
   primary key (id)
);

alter table oms_order comment '訂單';

/*==============================================================*/
/* Table: oms_order_item                                        */
/*==============================================================*/
create table oms_order_item
(
   id                   bigint not null auto_increment comment 'id',
   order_id             bigint comment 'order_id',
   order_sn             char(32) comment 'order_sn',
   spu_id               bigint comment 'spu_id',
   spu_name             varchar(255) comment 'spu_name',
   spu_pic              varchar(500) comment 'spu_pic',
   spu_brand            varchar(200) comment '品牌',
   category_id          bigint comment '商品分類id',
   sku_id               bigint comment '商品sku編號',
   sku_name             varchar(255) comment '商品sku名字',
   sku_pic              varchar(500) comment '商品sku圖片',
   sku_price            decimal(18,4) comment '商品sku價格',
   sku_quantity         int comment '商品購買的數量',
   sku_attrs_vals       varchar(500) comment '商品銷售屬性組合(JSON)',
   promotion_amount     decimal(18,4) comment '商品促銷分解金額',
   coupon_amount        decimal(18,4) comment '優惠券優惠分解金額',
   integration_amount   decimal(18,4) comment '積分優惠分解金額',
   real_amount          decimal(18,4) comment '該商品經過優惠後的分解金額',
   gift_integration     int comment '贈送積分',
   gift_growth          int comment '贈送成長值',
   primary key (id)
);

alter table oms_order_item comment '訂單項資訊';

/*==============================================================*/
/* Table: oms_order_operate_history                             */
/*==============================================================*/
create table oms_order_operate_history
(
   id                   bigint not null auto_increment comment 'id',
   order_id             bigint comment '訂單id',
   operate_man          varchar(100) comment '操作人[使用者;系統;後臺管理員]',
   create_time          datetime comment '操作時間',
   order_status         tinyint comment '訂單狀態【0->待付款;1->待發貨;2->已發貨;3->已完成;4->已關閉;5->無效訂單】',
   note                 varchar(500) comment '備註',
   primary key (id)
);

alter table oms_order_operate_history comment '訂單操作歷史記錄';

/*==============================================================*/
/* Table: oms_order_return_apply                                */
/*==============================================================*/
create table oms_order_return_apply
(
   id                   bigint not null auto_increment comment 'id',
   order_id             bigint comment 'order_id',
   sku_id               bigint comment '退貨商品id',
   order_sn             char(32) comment '訂單編號',
   create_time          datetime comment '申請時間',
   member_username      varchar(64) comment '會員使用者名稱',
   return_amount        decimal(18,4) comment '退款金額',
   return_name          varchar(100) comment '退貨人姓名',
   return_phone         varchar(20) comment '退貨人電話',
   status               tinyint(1) comment '申請狀態[0->待處理;1->退貨中;2->已完成;3->已拒絕]',
   handle_time          datetime comment '處理時間',
   sku_img              varchar(500) comment '商品圖片',
   sku_name             varchar(200) comment '商品名稱',
   sku_brand            varchar(200) comment '商品品牌',
   sku_attrs_vals       varchar(500) comment '商品銷售屬性(JSON)',
   sku_count            int comment '退貨數量',
   sku_price            decimal(18,4) comment '商品單價',
   sku_real_price       decimal(18,4) comment '商品實際支付單價',
   reason               varchar(200) comment '原因',
   description述         varchar(500) comment '描述',
   desc_pics            varchar(2000) comment '憑證圖片,以逗號隔開',
   handle_note          varchar(500) comment '處理備註',
   handle_man           varchar(200) comment '處理人員',
   receive_man          varchar(100) comment '收貨人',
   receive_time         datetime comment '收貨時間',
   receive_note         varchar(500) comment '收貨備註',
   receive_phone        varchar(20) comment '收貨電話',
   company_address      varchar(500) comment '公司收貨地址',
   primary key (id)
);

alter table oms_order_return_apply comment '訂單退貨申請';

/*==============================================================*/
/* Table: oms_order_return_reason                               */
/*==============================================================*/
create table oms_order_return_reason
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(200) comment '退貨原因名',
   sort                 int comment '排序',
   status               tinyint(1) comment '啟用狀態',
   create_time          datetime comment 'create_time',
   primary key (id)
);

alter table oms_order_return_reason comment '退貨原因';

/*==============================================================*/
/* Table: oms_order_setting                                     */
/*==============================================================*/
create table oms_order_setting
(
   id                   bigint not null auto_increment comment 'id',
   flash_order_overtime int comment '秒殺訂單超時關閉時間(分)',
   normal_order_overtime int comment '正常訂單超時時間(分)',
   confirm_overtime     int comment '發貨後自動確認收貨時間(天)',
   finish_overtime      int comment '自動完成交易時間,不能申請退貨(天)',
   comment_overtime     int comment '訂單完成後自動好評時間(天)',
   member_level         tinyint(2) comment '會員等級【0-不限會員等級,全部通用;其他-對應的其他會員等級】',
   primary key (id)
);

alter table oms_order_setting comment '訂單配置資訊';

/*==============================================================*/
/* Table: oms_payment_info                                      */
/*==============================================================*/
create table oms_payment_info
(
   id                   bigint not null auto_increment comment 'id',
   order_sn             char(32) comment '訂單號(對外業務號)',
   order_id             bigint comment '訂單id',
   alipay_trade_no      varchar(50) comment '支付寶交易流水號',
   total_amount         decimal(18,4) comment '支付總金額',
   subject              varchar(200) comment '交易內容',
   payment_status       varchar(20) comment '支付狀態',
   create_time          datetime comment '建立時間',
   confirm_time         datetime comment '確認時間',
   callback_content     varchar(4000) comment '回撥內容',
   callback_time        datetime comment '回撥時間',
   primary key (id)
);

alter table oms_payment_info comment '支付資訊表';

/*==============================================================*/
/* Table: oms_refund_info                                       */
/*==============================================================*/
create table oms_refund_info
(
   id                   bigint not null auto_increment comment 'id',
   order_return_id      bigint comment '退款的訂單',
   refund               decimal(18,4) comment '退款金額',
   refund_sn            varchar(64) comment '退款交易流水號',
   refund_status        tinyint(1) comment '退款狀態',
   refund_channel       tinyint comment '退款渠道[1-支付寶,2-微信,3-銀聯,4-匯款]',
   refund_content       varchar(5000),
   primary key (id)
);

alter table oms_refund_info comment '退款資訊';

(2)資料庫gulimall_pms(商品服務),執行sql檔案 gulimall-pms.sql

drop table if exists pms_attr;

drop table if exists pms_attr_attrgroup_relation;

drop table if exists pms_attr_group;

drop table if exists pms_brand;

drop table if exists pms_category;

drop table if exists pms_category_brand_relation;

drop table if exists pms_comment_replay;

drop table if exists pms_product_attr_value;

drop table if exists pms_sku_images;

drop table if exists pms_sku_info;

drop table if exists pms_sku_sale_attr_value;

drop table if exists pms_spu_comment;

drop table if exists pms_spu_images;

drop table if exists pms_spu_info;

drop table if exists pms_spu_info_desc;

/*==============================================================*/
/* Table: pms_attr                                              */
/*==============================================================*/
create table pms_attr
(
   attr_id              bigint not null auto_increment comment '屬性id',
   attr_name            char(30) comment '屬性名',
   search_type          tinyint comment '是否需要檢索[0-不需要,1-需要]',
  `value_type` tinyint(4) DEFAULT NULL COMMENT '值型別[0-為單個值,1-可以選擇多個值]',
  `icon` varchar(255) DEFAULT NULL COMMENT '屬性圖示',
  `value_select` char(255) DEFAULT NULL COMMENT '可選值列表[用逗號分隔]',
  `attr_type` tinyint(4) DEFAULT NULL COMMENT '屬性型別[0-銷售屬性,1-基本屬性,2-既是銷售屬性又是基本屬性]',
   enable               bigint comment '啟用狀態[0 - 禁用,1 - 啟用]',
   catelog_id           bigint comment '所屬分類',
   show_desc            tinyint comment '快速展示【是否展示在介紹上;0-否 1-是】,在sku中仍然可以調整',
   primary key (attr_id)
);

alter table pms_attr comment '商品屬性';

/*==============================================================*/
/* Table: pms_attr_attrgroup_relation                           */
/*==============================================================*/
create table pms_attr_attrgroup_relation
(
   id                   bigint not null auto_increment comment 'id',
   attr_id              bigint comment '屬性id',
   attr_group_id        bigint comment '屬性分組id',
   attr_sort            int comment '屬性組內排序',
   primary key (id)
);

alter table pms_attr_attrgroup_relation comment '屬性&屬性分組關聯';

/*==============================================================*/
/* Table: pms_attr_group                                        */
/*==============================================================*/
create table pms_attr_group
(
   attr_group_id        bigint not null auto_increment comment '分組id',
   attr_group_name      char(20) comment '組名',
   sort                 int comment '排序',
   descript             varchar(255) comment '描述',
   icon                 varchar(255) comment '組圖示',
   catelog_id           bigint comment '所屬分類id',
   primary key (attr_group_id)
);

alter table pms_attr_group comment '屬性分組';

/*==============================================================*/
/* Table: pms_brand                                             */
/*==============================================================*/
create table pms_brand
(
   brand_id             bigint not null auto_increment comment '品牌id',
   name                 char(50) comment '品牌名',
   logo                 varchar(2000) comment '品牌logo地址',
   descript             longtext comment '介紹',
   show_status          tinyint comment '顯示狀態[0-不顯示;1-顯示]',
   first_letter         char(1) comment '檢索首字母',
   sort                 int comment '排序',
   primary key (brand_id)
);

alter table pms_brand comment '品牌';

/*==============================================================*/
/* Table: pms_category                                          */
/*==============================================================*/
create table pms_category
(
   cat_id               bigint not null auto_increment comment '分類id',
   name                 char(50) comment '分類名稱',
   parent_cid           bigint comment '父分類id',
   cat_level            int comment '層級',
   show_status          tinyint comment '是否顯示[0-不顯示,1顯示]',
   sort                 int comment '排序',
   icon                 char(255) comment '圖示地址',
   product_unit         char(50) comment '計量單位',
   product_count        int comment '商品數量',
   primary key (cat_id)
);

alter table pms_category comment '商品三級分類';

/*==============================================================*/
/* Table: pms_category_brand_relation                           */
/*==============================================================*/
create table pms_category_brand_relation
(
   id                   bigint not null auto_increment,
   brand_id             bigint comment '品牌id',
   catelog_id           bigint comment '分類id',
   brand_name           varchar(255),
   catelog_name         varchar(255),
   primary key (id)
);

alter table pms_category_brand_relation comment '品牌分類關聯';

/*==============================================================*/
/* Table: pms_comment_replay                                    */
/*==============================================================*/
create table pms_comment_replay
(
   id                   bigint not null auto_increment comment 'id',
   comment_id           bigint comment '評論id',
   reply_id             bigint comment '回覆id',
   primary key (id)
);

alter table pms_comment_replay comment '商品評價回覆關係';

/*==============================================================*/
/* Table: pms_product_attr_value                                */
/*==============================================================*/
create table pms_product_attr_value
(
   id                   bigint not null auto_increment comment 'id',
   spu_id               bigint comment '商品id',
   attr_id              bigint comment '屬性id',
   attr_name            varchar(200) comment '屬性名',
   attr_value           varchar(200) comment '屬性值',
   attr_sort            int comment '順序',
   quick_show           tinyint comment '快速展示【是否展示在介紹上;0-否 1-是】',
   primary key (id)
);

alter table pms_product_attr_value comment 'spu屬性值';

/*==============================================================*/
/* Table: pms_sku_images                                        */
/*==============================================================*/
create table pms_sku_images
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   img_url              varchar(255) comment '圖片地址',
   img_sort             int comment '排序',
   default_img          int comment '預設圖[0 - 不是預設圖,1 - 是預設圖]',
   primary key (id)
);

alter table pms_sku_images comment 'sku圖片';

/*==============================================================*/
/* Table: pms_sku_info                                          */
/*==============================================================*/
create table pms_sku_info
(
   sku_id               bigint not null auto_increment comment 'skuId',
   spu_id               bigint comment 'spuId',
   sku_name             varchar(255) comment 'sku名稱',
   sku_desc             varchar(2000) comment 'sku介紹描述',
   catalog_id           bigint comment '所屬分類id',
   brand_id             bigint comment '品牌id',
   sku_default_img      varchar(255) comment '預設圖片',
   sku_title            varchar(255) comment '標題',
   sku_subtitle         varchar(2000) comment '副標題',
   price                decimal(18,4) comment '價格',
   sale_count           bigint comment '銷量',
   primary key (sku_id)
);

alter table pms_sku_info comment 'sku資訊';

/*==============================================================*/
/* Table: pms_sku_sale_attr_value                               */
/*==============================================================*/
create table pms_sku_sale_attr_value
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   attr_id              bigint comment 'attr_id',
   attr_name            varchar(200) comment '銷售屬性名',
   attr_value           varchar(200) comment '銷售屬性值',
   attr_sort            int comment '順序',
   primary key (id)
);

alter table pms_sku_sale_attr_value comment 'sku銷售屬性&值';

/*==============================================================*/
/* Table: pms_spu_comment                                       */
/*==============================================================*/
create table pms_spu_comment
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   spu_id               bigint comment 'spu_id',
   spu_name             varchar(255) comment '商品名字',
   member_nick_name     varchar(255) comment '會員暱稱',
   star                 tinyint(1) comment '星級',
   member_ip            varchar(64) comment '會員ip',
   create_time          datetime comment '建立時間',
   show_status          tinyint(1) comment '顯示狀態[0-不顯示,1-顯示]',
   spu_attributes       varchar(255) comment '購買時屬性組合',
   likes_count          int comment '點贊數',
   reply_count          int comment '回覆數',
   resources            varchar(1000) comment '評論圖片/視訊[json資料;[{type:檔案型別,url:資源路徑}]]',
   content              text comment '內容',
   member_icon          varchar(255) comment '使用者頭像',
   comment_type         tinyint comment '評論型別[0 - 對商品的直接評論,1 - 對評論的回覆]',
   primary key (id)
);

alter table pms_spu_comment comment '商品評價';

/*==============================================================*/
/* Table: pms_spu_images                                        */
/*==============================================================*/
create table pms_spu_images
(
   id                   bigint not null auto_increment comment 'id',
   spu_id               bigint comment 'spu_id',
   img_name             varchar(200) comment '圖片名',
   img_url              varchar(255) comment '圖片地址',
   img_sort             int comment '順序',
   default_img          tinyint comment '是否預設圖',
   primary key (id)
);

alter table pms_spu_images comment 'spu圖片';

/*==============================================================*/
/* Table: pms_spu_info                                          */
/*==============================================================*/
create table pms_spu_info
(
   id                   bigint not null auto_increment comment '商品id',
   spu_name             varchar(200) comment '商品名稱',
   spu_description      varchar(1000) comment '商品描述',
   catalog_id           bigint comment '所屬分類id',
   brand_id             bigint comment '品牌id',
   weight               decimal(18,4),
   publish_status       tinyint comment '上架狀態[0 - 下架,1 - 上架]',
   create_time          datetime,
   update_time          datetime,
   primary key (id)
);

alter table pms_spu_info comment 'spu資訊';

/*==============================================================*/
/* Table: pms_spu_info_desc                                     */
/*==============================================================*/
create table pms_spu_info_desc
(
   spu_id               bigint not null comment '商品id',
   decript              longtext comment '商品介紹',
   primary key (spu_id)
);

alter table pms_spu_info_desc comment 'spu資訊介紹';

(3)資料庫gulimall_sms(優惠券服務),執行sql檔案 gulimall-sms.sql

drop table if exists sms_coupon;

drop table if exists sms_coupon_history;

drop table if exists sms_coupon_spu_category_relation;

drop table if exists sms_coupon_spu_relation;

drop table if exists sms_home_adv;

drop table if exists sms_home_subject;

drop table if exists sms_home_subject_spu;

drop table if exists sms_member_price;

drop table if exists sms_seckill_promotion;

drop table if exists sms_seckill_session;

drop table if exists sms_seckill_sku_notice;

drop table if exists sms_seckill_sku_relation;

drop table if exists sms_sku_full_reduction;

drop table if exists sms_sku_ladder;

drop table if exists sms_spu_bounds;

/*==============================================================*/
/* Table: sms_coupon                                            */
/*==============================================================*/
create table sms_coupon
(
   id                   bigint not null auto_increment comment 'id',
   coupon_type          tinyint(1) comment '優惠卷型別[0->全場贈券;1->會員贈券;2->購物贈券;3->註冊贈券]',
   coupon_img           varchar(2000) comment '優惠券圖片',
   coupon_name          varchar(100) comment '優惠卷名字',
   num                  int comment '數量',
   amount               decimal(18,4) comment '金額',
   per_limit            int comment '每人限領張數',
   min_point            decimal(18,4) comment '使用門檻',
   start_time           datetime comment '開始時間',
   end_time             datetime comment '結束時間',
   use_type             tinyint(1) comment '使用型別[0->全場通用;1->指定分類;2->指定商品]',
   note                 varchar(200) comment '備註',
   publish_count        int(11) comment '發行數量',
   use_count            int(11) comment '已使用數量',
   receive_count        int(11) comment '領取數量',
   enable_start_time    datetime comment '可以領取的開始日期',
   enable_end_time      datetime comment '可以領取的結束日期',
   code                 varchar(64) comment '優惠碼',
   member_level         tinyint(1) comment '可以領取的會員等級[0->不限等級,其他-對應等級]',
   publish              tinyint(1) comment '釋出狀態[0-未釋出,1-已釋出]',
   primary key (id)
);

alter table sms_coupon comment '優惠券資訊';

/*==============================================================*/
/* Table: sms_coupon_history                                    */
/*==============================================================*/
create table sms_coupon_history
(
   id                   bigint not null auto_increment comment 'id',
   coupon_id            bigint comment '優惠券id',
   member_id            bigint comment '會員id',
   member_nick_name     varchar(64) comment '會員名字',
   get_type             tinyint(1) comment '獲取方式[0->後臺贈送;1->主動領取]',
   create_time          datetime comment '建立時間',
   use_type             tinyint(1) comment '使用狀態[0->未使用;1->已使用;2->已過期]',
   use_time             datetime comment '使用時間',
   order_id             bigint comment '訂單id',
   order_sn             bigint comment '訂單號',
   primary key (id)
);

alter table sms_coupon_history comment '優惠券領取歷史記錄';

/*==============================================================*/
/* Table: sms_coupon_spu_category_relation                      */
/*==============================================================*/
create table sms_coupon_spu_category_relation
(
   id                   bigint not null auto_increment comment 'id',
   coupon_id            bigint comment '優惠券id',
   category_id          bigint comment '產品分類id',
   category_name        varchar(64) comment '產品分類名稱',
   primary key (id)
);

alter table sms_coupon_spu_category_relation comment '優惠券分類關聯';

/*==============================================================*/
/* Table: sms_coupon_spu_relation                               */
/*==============================================================*/
create table sms_coupon_spu_relation
(
   id                   bigint not null auto_increment comment 'id',
   coupon_id            bigint comment '優惠券id',
   spu_id               bigint comment 'spu_id',
   spu_name             varchar(255) comment 'spu_name',
   primary key (id)
);

alter table sms_coupon_spu_relation comment '優惠券與產品關聯';

/*==============================================================*/
/* Table: sms_home_adv                                          */
/*==============================================================*/
create table sms_home_adv
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(100) comment '名字',
   pic                  varchar(500) comment '圖片地址',
   start_time           datetime comment '開始時間',
   end_time             datetime comment '結束時間',
   status               tinyint(1) comment '狀態',
   click_count          int comment '點選數',
   url                  varchar(500) comment '廣告詳情連線地址',
   note                 varchar(500) comment '備註',
   sort                 int comment '排序',
   publisher_id         bigint comment '釋出者',
   auth_id              bigint comment '稽核者',
   primary key (id)
);

alter table sms_home_adv comment '首頁輪播廣告';

/*==============================================================*/
/* Table: sms_home_subject                                      */
/*==============================================================*/
create table sms_home_subject
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(200) comment '專題名字',
   title                varchar(255) comment '專題標題',
   sub_title            varchar(255) comment '專題副標題',
   status               tinyint(1) comment '顯示狀態',
   url                  varchar(500) comment '詳情連線',
   sort                 int comment '排序',
   img                  varchar(500) comment '專題圖片地址',
   primary key (id)
);

alter table sms_home_subject comment '首頁專題表【jd首頁下面很多專題,每個專題連結新的頁面,展示專題商品資訊】';

/*==============================================================*/
/* Table: sms_home_subject_spu                                  */
/*==============================================================*/
create table sms_home_subject_spu
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(200) comment '專題名字',
   subject_id           bigint comment '專題id',
   spu_id               bigint comment 'spu_id',
   sort                 int comment '排序',
   primary key (id)
);

alter table sms_home_subject_spu comment '專題商品';

/*==============================================================*/
/* Table: sms_member_price                                      */
/*==============================================================*/
create table sms_member_price
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   member_level_id      bigint comment '會員等級id',
   member_level_name    varchar(100) comment '會員等級名',
   member_price         decimal(18,4) comment '會員對應價格',
   add_other            tinyint(1) comment '可否疊加其他優惠[0-不可疊加優惠,1-可疊加]',
   primary key (id)
);

alter table sms_member_price comment '商品會員價格';

/*==============================================================*/
/* Table: sms_seckill_promotion                                 */
/*==============================================================*/
create table sms_seckill_promotion
(
   id                   bigint not null auto_increment comment 'id',
   title                varchar(255) comment '活動標題',
   start_time           datetime comment '開始日期',
   end_time             datetime comment '結束日期',
   status               tinyint comment '上下線狀態',
   create_time          datetime comment '建立時間',
   user_id              bigint comment '建立人',
   primary key (id)
);

alter table sms_seckill_promotion comment '秒殺活動';

/*==============================================================*/
/* Table: sms_seckill_session                                   */
/*==============================================================*/
create table sms_seckill_session
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(200) comment '場次名稱',
   start_time           datetime comment '每日開始時間',
   end_time             datetime comment '每日結束時間',
   status               tinyint(1) comment '啟用狀態',
   create_time          datetime comment '建立時間',
   primary key (id)
);

alter table sms_seckill_session comment '秒殺活動場次';

/*==============================================================*/
/* Table: sms_seckill_sku_notice                                */
/*==============================================================*/
create table sms_seckill_sku_notice
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   sku_id               bigint comment 'sku_id',
   session_id           bigint comment '活動場次id',
   subcribe_time        datetime comment '訂閱時間',
   send_time            datetime comment '傳送時間',
   notice_type          tinyint(1) comment '通知方式[0-簡訊,1-郵件]',
   primary key (id)
);

alter table sms_seckill_sku_notice comment '秒殺商品通知訂閱';

/*==============================================================*/
/* Table: sms_seckill_sku_relation                              */
/*==============================================================*/
create table sms_seckill_sku_relation
(
   id                   bigint not null auto_increment comment 'id',
   promotion_id         bigint comment '活動id',
   promotion_session_id bigint comment '活動場次id',
   sku_id               bigint comment '商品id',
   seckill_price        decimal comment '秒殺價格',
   seckill_count        decimal comment '秒殺總量',
   seckill_limit        decimal comment '每人限購數量',
   seckill_sort         int comment '排序',
   primary key (id)
);

alter table sms_seckill_sku_relation comment '秒殺活動商品關聯';

/*==============================================================*/
/* Table: sms_sku_full_reduction                                */
/*==============================================================*/
create table sms_sku_full_reduction
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'spu_id',
   full_price           decimal(18,4) comment '滿多少',
   reduce_price         decimal(18,4) comment '減多少',
   add_other            tinyint(1) comment '是否參與其他優惠',
   primary key (id)
);

alter table sms_sku_full_reduction comment '商品滿減資訊';

/*==============================================================*/
/* Table: sms_sku_ladder                                        */
/*==============================================================*/
create table sms_sku_ladder
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'spu_id',
   full_count           int comment '滿幾件',
   discount             decimal(4,2) comment '打幾折',
   price                decimal(18,4) comment '折後價',
   add_other            tinyint(1) comment '是否疊加其他優惠[0-不可疊加,1-可疊加]',
   primary key (id)
);

alter table sms_sku_ladder comment '商品階梯價格';

/*==============================================================*/
/* Table: sms_spu_bounds                                        */
/*==============================================================*/
create table sms_spu_bounds
(
   id                   bigint not null auto_increment comment 'id',
   spu_id               bigint,
   grow_bounds          decimal(18,4) comment '成長積分',
   buy_bounds           decimal(18,4) comment '購物積分',
   work                 tinyint(1) comment '優惠生效情況[1111(四個狀態位,從右到左);0 - 無優惠,成長積分是否贈送;1 - 無優惠,購物積分是否贈送;2 - 有優惠,成長積分是否贈送;3 - 有優惠,購物積分是否贈送【狀態位0:不贈送,1:贈送】]',
   primary key (id)
);

alter table sms_spu_bounds comment '商品spu積分設定';

(4)資料庫gulimall_ums(使用者服務),執行sql檔案 gulimall-ums.sql

drop table if exists ums_growth_change_history;

drop table if exists ums_integration_change_history;

drop table if exists ums_member;

drop table if exists ums_member_collect_spu;

drop table if exists ums_member_collect_subject;

drop table if exists ums_member_level;

drop table if exists ums_member_login_log;

drop table if exists ums_member_receive_address;

drop table if exists ums_member_statistics_info;

/*==============================================================*/
/* Table: ums_growth_change_history                             */
/*==============================================================*/
create table ums_growth_change_history
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   create_time          datetime comment 'create_time',
   change_count         int comment '改變的值(正負計數)',
   note                 varchar(0) comment '備註',
   source_type          tinyint comment '積分來源[0-購物,1-管理員修改]',
   primary key (id)
);

alter table ums_growth_change_history comment '成長值變化歷史記錄';

/*==============================================================*/
/* Table: ums_integration_change_history                        */
/*==============================================================*/
create table ums_integration_change_history
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   create_time          datetime comment 'create_time',
   change_count         int comment '變化的值',
   note                 varchar(255) comment '備註',
   source_tyoe          tinyint comment '來源[0->購物;1->管理員修改;2->活動]',
   primary key (id)
);

alter table ums_integration_change_history comment '積分變化歷史記錄';

/*==============================================================*/
/* Table: ums_member                                            */
/*==============================================================*/
create table ums_member
(
   id                   bigint not null auto_increment comment 'id',
   level_id             bigint comment '會員等級id',
   username             char(64) comment '使用者名稱',
   password             varchar(64) comment '密碼',
   nickname             varchar(64) comment '暱稱',
   mobile               varchar(20) comment '手機號碼',
   email                varchar(64) comment '郵箱',
   header               varchar(500) comment '頭像',
   gender               tinyint comment '性別',
   birth                date comment '生日',
   city                 varchar(500) comment '所在城市',
   job                  varchar(255) comment '職業',
   sign                 varchar(255) comment '個性簽名',
   source_type          tinyint comment '使用者來源',
   integration          int comment '積分',
   growth               int comment '成長值',
   status               tinyint comment '啟用狀態',
   create_time          datetime comment '註冊時間',
   primary key (id)
);

alter table ums_member comment '會員';

/*==============================================================*/
/* Table: ums_member_collect_spu                                */
/*==============================================================*/
create table ums_member_collect_spu
(
   id                   bigint not null comment 'id',
   member_id            bigint comment '會員id',
   spu_id               bigint comment 'spu_id',
   spu_name             varchar(500) comment 'spu_name',
   spu_img              varchar(500) comment 'spu_img',
   create_time          datetime comment 'create_time',
   primary key (id)
);

alter table ums_member_collect_spu comment '會員收藏的商品';

/*==============================================================*/
/* Table: ums_member_collect_subject                            */
/*==============================================================*/
create table ums_member_collect_subject
(
   id                   bigint not null auto_increment comment 'id',
   subject_id           bigint comment 'subject_id',
   subject_name         varchar(255) comment 'subject_name',
   subject_img          varchar(500) comment 'subject_img',
   subject_urll         varchar(500) comment '活動url',
   primary key (id)
);

alter table ums_member_collect_subject comment '會員收藏的專題活動';

/*==============================================================*/
/* Table: ums_member_level                                      */
/*==============================================================*/
create table ums_member_level
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(100) comment '等級名稱',
   growth_point         int comment '等級需要的成長值',
   default_status       tinyint comment '是否為預設等級[0->不是;1->是]',
   free_freight_point   decimal(18,4) comment '免運費標準',
   comment_growth_point int comment '每次評價獲取的成長值',
   priviledge_free_freight tinyint comment '是否有免郵特權',
   priviledge_member_price tinyint comment '是否有會員價格特權',
   priviledge_birthday  tinyint comment '是否有生日特權',
   note                 varchar(255) comment '備註',
   primary key (id)
);

alter table ums_member_level comment '會員等級';

/*==============================================================*/
/* Table: ums_member_login_log                                  */
/*==============================================================*/
create table ums_member_login_log
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   create_time          datetime comment '建立時間',
   ip                   varchar(64) comment 'ip',
   city                 varchar(64) comment 'city',
   login_type           tinyint(1) comment '登入型別[1-web,2-app]',
   primary key (id)
);

alter table ums_member_login_log comment '會員登入記錄';

/*==============================================================*/
/* Table: ums_member_receive_address                            */
/*==============================================================*/
create table ums_member_receive_address
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment 'member_id',
   name                 varchar(255) comment '收貨人姓名',
   phone                varchar(64) comment '電話',
   post_code            varchar(64) comment '郵政編碼',
   province             varchar(100) comment '省份/直轄市',
   city                 varchar(100) comment '城市',
   region               varchar(100) comment '',
   detail_address       varchar(255) comment '詳細地址(街道)',
   areacode             varchar(15) comment '省市區程式碼',
   default_status       tinyint(1) comment '是否預設',
   primary key (id)
);

alter table ums_member_receive_address comment '會員收貨地址';

/*==============================================================*/
/* Table: ums_member_statistics_info                            */
/*==============================================================*/
create table ums_member_statistics_info
(
   id                   bigint not null auto_increment comment 'id',
   member_id            bigint comment '會員id',
   consume_amount       decimal(18,4) comment '累計消費金額',
   coupon_amount        decimal(18,4) comment '累計優惠金額',
   order_count          int comment '訂單數量',
   coupon_count         int comment '優惠券數量',
   comment_count        int comment '評價數',
   return_order_count   int comment '退貨數量',
   login_count          int comment '登入次數',
   attend_count         int comment '關注數量',
   fans_count           int comment '粉絲數量',
   collect_product_count int comment '收藏的商品數量',
   collect_subject_count int comment '收藏的專題活動數量',
   collect_comment_count int comment '收藏的評論數量',
   invite_friend_count  int comment '邀請的朋友數量',
   primary key (id)
);

alter table ums_member_statistics_info comment '會員統計資訊';

(5)資料庫gulimall_wms(倉儲服務),執行sql檔案 gulimall-wms.sql

drop table if exists wms_purchase;

drop table if exists wms_purchase_detail;

drop table if exists wms_ware_info;

drop table if exists wms_ware_order_task;

drop table if exists wms_ware_order_task_detail;

drop table if exists wms_ware_sku;

/*==============================================================*/
/* Table: wms_purchase                                          */
/*==============================================================*/
create table wms_purchase
(
   id                   bigint not null auto_increment comment '採購單id',
   assignee_id          bigint comment '採購人id',
   assignee_name        varchar(255) comment '採購人名',
   phone                char(13) comment '聯絡方式',
   priority             int(4) comment '優先順序',
   status               int(4) comment '狀態',
   ware_id              bigint comment '倉庫id',
   amount               decimal(18,4) comment '總金額',
   create_time          datetime comment '建立日期',
   update_time          datetime comment '更新日期',
   primary key (id)
);

alter table wms_purchase comment '採購資訊';

/*==============================================================*/
/* Table: wms_purchase_detail                                   */
/*==============================================================*/
create table wms_purchase_detail
(
   id                   bigint not null auto_increment,
   purchase_id          bigint comment '採購單id',
   sku_id               bigint comment '採購商品id',
   sku_num              int comment '採購數量',
   sku_price            decimal(18,4) comment '採購金額',
   ware_id              bigint comment '倉庫id',
   status               int comment '狀態[0新建,1已分配,2正在採購,3已完成,4採購失敗]',
   primary key (id)
);

/*==============================================================*/
/* Table: wms_ware_info                                         */
/*==============================================================*/
create table wms_ware_info
(
   id                   bigint not null auto_increment comment 'id',
   name                 varchar(255) comment '倉庫名',
   address              varchar(255) comment '倉庫地址',
   areacode             varchar(20) comment '區域編碼',
   primary key (id)
);

alter table wms_ware_info comment '倉庫資訊';

/*==============================================================*/
/* Table: wms_ware_order_task                                   */
/*==============================================================*/
create table wms_ware_order_task
(
   id                   bigint not null auto_increment comment 'id',
   order_id             bigint comment 'order_id',
   order_sn             varchar(255) comment 'order_sn',
   consignee            varchar(100) comment '收貨人',
   consignee_tel        char(15) comment '收貨人電話',
   delivery_address     varchar(500) comment '配送地址',
   order_comment        varchar(200) comment '訂單備註',
   payment_way          tinyint(1) comment '付款方式【 1:線上付款 2:貨到付款】',
   task_status          tinyint(2) comment '任務狀態',
   order_body           varchar(255) comment '訂單描述',
   tracking_no          char(30) comment '物流單號',
   create_time          datetime comment 'create_time',
   ware_id              bigint comment '倉庫id',
   task_comment         varchar(500) comment '工作單備註',
   primary key (id)
);

alter table wms_ware_order_task comment '庫存工作單';

/*==============================================================*/
/* Table: wms_ware_order_task_detail                            */
/*==============================================================*/
create table wms_ware_order_task_detail
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   sku_name             varchar(255) comment 'sku_name',
   sku_num              int comment '購買個數',
   task_id              bigint comment '工作單id',
   primary key (id)
);

alter table wms_ware_order_task_detail comment '庫存工作單';

/*==============================================================*/
/* Table: wms_ware_sku                                          */
/*==============================================================*/
create table wms_ware_sku
(
   id                   bigint not null auto_increment comment 'id',
   sku_id               bigint comment 'sku_id',
   ware_id              bigint comment '倉庫id',
   stock                int comment '庫存數',
   sku_name             varchar(200) comment 'sku_name',
   stock_locked         int comment '鎖定庫存',
   primary key (id)
);

alter table wms_ware_sku comment '商品庫存';

6、搭建人人開源管理系統——後端

1、clone 人人開源
    https://gitee.com/renrenio
 (1)克隆到本地    
    git clone https://gitee.com/renrenio/renren-fast-vue.git
    
    git clone https://gitee.com/renrenio/renren-fast.git

2、搭建renren-fast後端開發環境

  (1)將拷貝下來的"renren-fast"刪除".git"後,拷貝到"gulimall"工程根目錄,然後將它作為gulimall的一個module

    "renren-fast-vue"的".git"也刪除掉 

 (2)將"renren-fast"作為module加入gulimall總專案中

  (3)建立"gulimall_admin"資料庫

    建立“gulimall_admin”的資料庫,然後執行“renren-fast/db/mysql.sql”中的SQl指令碼,資料庫指令碼資訊如下:

-- 選單
CREATE TABLE `sys_menu` (
  `menu_id` bigint NOT NULL AUTO_INCREMENT,
  `parent_id` bigint COMMENT '父選單ID,一級選單為0',
  `name` varchar(50) COMMENT '選單名稱',
  `url` varchar(200) COMMENT '選單URL',
  `perms` varchar(500) COMMENT '授權(多個用逗號分隔,如:user:list,user:create)',
  `type` int COMMENT '型別   0:目錄   1:選單   2:按鈕',
  `icon` varchar(50) COMMENT '選單圖示',
  `order_num` int COMMENT '排序',
  PRIMARY KEY (`menu_id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='選單管理';

-- 系統使用者
CREATE TABLE `sys_user` (
  `user_id` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '使用者名稱',
  `password` varchar(100) COMMENT '密碼',
  `salt` varchar(20) COMMENT '',
  `email` varchar(100) COMMENT '郵箱',
  `mobile` varchar(100) COMMENT '手機號',
  `status` tinyint COMMENT '狀態  0:禁用   1:正常',
  `create_user_id` bigint(20) COMMENT '建立者ID',
  `create_time` datetime COMMENT '建立時間',
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX (`username`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='系統使用者';

-- 系統使用者Token
CREATE TABLE `sys_user_token` (
  `user_id` bigint(20) NOT NULL,
  `token` varchar(100) NOT NULL COMMENT 'token',
  `expire_time` datetime DEFAULT NULL COMMENT '過期時間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時間',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `token` (`token`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='系統使用者Token';

-- 系統驗證碼
CREATE TABLE `sys_captcha` (
  `uuid` char(36) NOT NULL COMMENT 'uuid',
  `code` varchar(6) NOT NULL COMMENT '驗證碼',
  `expire_time` datetime DEFAULT NULL COMMENT '過期時間',
  PRIMARY KEY (`uuid`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='系統驗證碼';

-- 角色
CREATE TABLE `sys_role` (
  `role_id` bigint NOT NULL AUTO_INCREMENT,
  `role_name` varchar(100) COMMENT '角色名稱',
  `remark` varchar(100) COMMENT '備註',
  `create_user_id` bigint(20) COMMENT '建立者ID',
  `create_time` datetime COMMENT '建立時間',
  PRIMARY KEY (`role_id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='角色';

-- 使用者與角色對應關係
CREATE TABLE `sys_user_role` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint COMMENT '使用者ID',
  `role_id` bigint COMMENT '角色ID',
  PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='使用者與角色對應關係';

-- 角色與選單對應關係
CREATE TABLE `sys_role_menu` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `role_id` bigint COMMENT '角色ID',
  `menu_id` bigint COMMENT '選單ID',
  PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='角色與選單對應關係';

-- 系統配置資訊
CREATE TABLE `sys_config` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `param_key` varchar(50) COMMENT 'key',
    `param_value` varchar(2000) COMMENT 'value',
    `status` tinyint DEFAULT 1 COMMENT '狀態   0:隱藏   1:顯示',
    `remark` varchar(500) COMMENT '備註',
    PRIMARY KEY (`id`),
    UNIQUE INDEX (`param_key`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='系統配置資訊表';

-- 系統日誌
CREATE TABLE `sys_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COMMENT '使用者名稱',
  `operation` varchar(50) COMMENT '使用者操作',
  `method` varchar(200) COMMENT '請求方法',
  `params` varchar(5000) COMMENT '請求引數',
  `time` bigint NOT NULL COMMENT '執行時長(毫秒)',
  `ip` varchar(64) COMMENT 'IP地址',
  `create_date` datetime COMMENT '建立時間',
  PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='系統日誌';

-- 檔案上傳
CREATE TABLE `sys_oss` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `url` varchar(200) COMMENT 'URL地址',
  `create_date` datetime COMMENT '建立時間',
  PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='檔案上傳';

-- 定時任務
CREATE TABLE `schedule_job` (
  `job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任務id',
  `bean_name` varchar(200) DEFAULT NULL COMMENT 'spring bean名稱',
  `params` varchar(2000) DEFAULT NULL COMMENT '引數',
  `cron_expression` varchar(100) DEFAULT NULL COMMENT 'cron表示式',
  `status` tinyint(4) DEFAULT NULL COMMENT '任務狀態  0:正常  1:暫停',
  `remark` varchar(255) DEFAULT NULL COMMENT '備註',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  PRIMARY KEY (`job_id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='定時任務';

-- 定時任務日誌
CREATE TABLE `schedule_job_log` (
  `log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任務日誌id',
  `job_id` bigint(20) NOT NULL COMMENT '任務id',
  `bean_name` varchar(200) DEFAULT NULL COMMENT 'spring bean名稱',
  `params` varchar(2000) DEFAULT NULL COMMENT '引數',
  `status` tinyint(4) NOT NULL COMMENT '任務狀態    0:成功    1:失敗',
  `error` varchar(2000) DEFAULT NULL COMMENT '失敗資訊',
  `times` int(11) NOT NULL COMMENT '耗時(單位:毫秒)',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  PRIMARY KEY (`log_id`),
  KEY `job_id` (`job_id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='定時任務日誌';

-- 使用者表
CREATE TABLE `tb_user` (
  `user_id` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '使用者名稱',
  `mobile` varchar(20) NOT NULL COMMENT '手機號',
  `password` varchar(64) COMMENT '密碼',
  `create_time` datetime COMMENT '建立時間',
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX (`username`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8mb4 COMMENT='使用者';

-- 初始資料 
INSERT INTO `sys_user` (`user_id`, `username`, `password`, `salt`, `email`, `mobile`, `status`, `create_user_id`, `create_time`) VALUES ('1', 'admin', '9ec9750e709431dad22365cabc5c625482e574c74adaebba7dd02f1129e4ce1d', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13612345678', '1', '1', '2016-11-11 11:11:11');

INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (1, 0, '系統管理', NULL, NULL, 0, 'system', 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (2, 1, '管理員列表', 'sys/user', NULL, 1, 'admin', 1);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (3, 1, '角色管理', 'sys/role', NULL, 1, 'role', 2);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (4, 1, '選單管理', 'sys/menu', NULL, 1, 'menu', 3);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (5, 1, 'SQL監控', 'http://localhost:8080/renren-fast/druid/sql.html', NULL, 1, 'sql', 4);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (6, 1, '定時任務', 'job/schedule', NULL, 1, 'job', 5);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (7, 6, '檢視', NULL, 'sys:schedule:list,sys:schedule:info', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (8, 6, '新增', NULL, 'sys:schedule:save', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (9, 6, '修改', NULL, 'sys:schedule:update', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (10, 6, '刪除', NULL, 'sys:schedule:delete', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (11, 6, '暫停', NULL, 'sys:schedule:pause', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (12, 6, '恢復', NULL, 'sys:schedule:resume', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (13, 6, '立即執行', NULL, 'sys:schedule:run', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (14, 6, '日誌列表', NULL, 'sys:schedule:log', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (15, 2, '檢視', NULL, 'sys:user:list,sys:user:info', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (16, 2, '新增', NULL, 'sys:user:save,sys:role:select', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (17, 2, '修改', NULL, 'sys:user:update,sys:role:select', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (18, 2, '刪除', NULL, 'sys:user:delete', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (19, 3, '檢視', NULL, 'sys:role:list,sys:role:info', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (20, 3, '新增', NULL, 'sys:role:save,sys:menu:list', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (21, 3, '修改', NULL, 'sys:role:update,sys:menu:list', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (22, 3, '刪除', NULL, 'sys:role:delete', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (23, 4, '檢視', NULL, 'sys:menu:list,sys:menu:info', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (24, 4, '新增', NULL, 'sys:menu:save,sys:menu:select', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (25, 4, '修改', NULL, 'sys:menu:update,sys:menu:select', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (26, 4, '刪除', NULL, 'sys:menu:delete', 2, NULL, 0);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (27, 1, '引數管理', 'sys/config', 'sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete', 1, 'config', 6);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (29, 1, '系統日誌', 'sys/log', 'sys:log:list', 1, 'log', 7);
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES (30, 1, '檔案上傳', 'oss/oss', 'sys:oss:all', 1, 'oss', 6);

INSERT INTO `sys_config` (`param_key`, `param_value`, `status`, `remark`) VALUES ('CLOUD_STORAGE_CONFIG_KEY', '{\"aliyunAccessKeyId\":\"\",\"aliyunAccessKeySecret\":\"\",\"aliyunBucketName\":\"\",\"aliyunDomain\":\"\",\"aliyunEndPoint\":\"\",\"aliyunPrefix\":\"\",\"qcloudBucketName\":\"\",\"qcloudDomain\":\"\",\"qcloudPrefix\":\"\",\"qcloudSecretId\":\"\",\"qcloudSecretKey\":\"\",\"qiniuAccessKey\":\"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ\",\"qiniuBucketName\":\"ios-app\",\"qiniuDomain\":\"http://7xqbwh.dl1.z0.glb.clouddn.com\",\"qiniuPrefix\":\"upload\",\"qiniuSecretKey\":\"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV\",\"type\":1}', '0', '雲端儲存配置資訊');
INSERT INTO `schedule_job` (`bean_name`, `params`, `cron_expression`, `status`, `remark`, `create_time`) VALUES ('testTask', 'renren', '0 0/30 * * * ?', '0', '引數測試', now());

-- 賬號:13612345678  密碼:admin
INSERT INTO `tb_user` (`username`, `mobile`, `password`, `create_time`) VALUES ('mark', '13612345678', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', '2017-03-23 22:37:41');

--  quartz自帶表結構
CREATE TABLE QRTZ_JOB_DETAILS(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_NONCONCURRENT VARCHAR(1) NOT NULL,
IS_UPDATE_DATA VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
NEXT_FIRE_TIME BIGINT(13) NULL,
PREV_FIRE_TIME BIGINT(13) NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(16) NOT NULL,
TRIGGER_TYPE VARCHAR(8) NOT NULL,
START_TIME BIGINT(13) NOT NULL,
END_TIME BIGINT(13) NULL,
CALENDAR_NAME VARCHAR(200) NULL,
MISFIRE_INSTR SMALLINT(2) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
REPEAT_COUNT BIGINT(7) NOT NULL,
REPEAT_INTERVAL BIGINT(12) NOT NULL,
TIMES_TRIGGERED BIGINT(10) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
CRON_EXPRESSION VARCHAR(120) NOT NULL,
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_SIMPROP_TRIGGERS
  (          
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    STR_PROP_1 VARCHAR(512) NULL,
    STR_PROP_2 VARCHAR(512) NULL,
    STR_PROP_3 VARCHAR(512) NULL,
    INT_PROP_1 INT NULL,
    INT_PROP_2 INT NULL,
    LONG_PROP_1 BIGINT NULL,
    LONG_PROP_2 BIGINT NULL,
    DEC_PROP_1 NUMERIC(13,4) NULL,
    DEC_PROP_2 NUMERIC(13,4) NULL,
    BOOL_PROP_1 VARCHAR(1) NULL,
    BOOL_PROP_2 VARCHAR(1) NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 
    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
FIRED_TIME BIGINT(13) NOT NULL,
SCHED_TIME BIGINT(13) NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(16) NOT NULL,
JOB_NAME VARCHAR(200) NULL,
JOB_GROUP VARCHAR(200) NULL,
IS_NONCONCURRENT VARCHAR(1) NULL,
REQUESTS_RECOVERY VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
CHECKIN_INTERVAL BIGINT(13) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);

CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);

CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
 (4)修改“application-dev.yml”檔案,預設為dev環境,修改連線mysql的url和使用者名稱密碼

  注意:由於是前後端分離的專案,需要搭建前端專案環境才行

7、搭建人人開源管理系統——前端

1、vscode開啟renren-fast-vue
  注意:需要以管理員身份執行vscode
2、安裝node
  前端開發,少不了 node.jsNode.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境。
  http://nodejs.cn/api/   我們關注與 node.js npm 功能就行;   NPM 是隨同 NodeJS 一起安裝的包管理工具,JavaScript-NPMJava-Maven
 (1)下載安裝
    https://nodejs.org/dist/v10.16.3/node-v10.16.3-x64.msi
    傻瓜式操作即可
 (2)檢視安裝版本
    node -v

  (3)配置npm使用淘寶映象

    npm config set registry http://registry.npm.taobao.org/

3、專案終端npm install下載專案所需依賴元件
    npm install

  下載過程過,出現以下錯誤

  原因:缺少python環境,需要安裝編譯環境

  解決辦法:新增Windows下node的Python的編譯環境

    方法1:npm install --global --production windows-build-tools

    方法2:自行下載

       npminstall--python=python2.7 #先下載
       npm config set python python2.7 #再設定環境

  注意:其間,我用方法1處理的時候一直卡在綠色文字"Successfully installed Visual Studio Build Tools."

  解決辦法:

    (a)保證你安裝了Visual Studio

    (b)在資源管理中搜索%temp%,window系統按住win按鍵直接搜尋就可以

    (c)在搜尋到的資料夾%temp%中建立dd_client_.log檔案,並且填入內容Closing installer. Return code: 3010.

    electron備忘錄:

    補充:electron專案需要node的版本與electron有對應關係,實際上是node的NODE_MODULE_VERSION要和electron abi要對應,可以在這個地址檢視下https://nodejs.org/zh-cn/download/releases/
  最後再次執行方式1的命令之後,就是上面成功的效果了   解決完Python安裝的問題之後,我們回到vscode終端,再次執行npm install 安裝依賴
4、執行前端專案 
    npm run dev

   啟動成功,訪問地址:http://localhost:8001

  注意:renren-fast也要啟動

  登入以下,賬號:admin 密碼:admin

8、逆向工程搭建和微服務模組構建

1、clone 人人開源
    https://gitee.com/renrenio
(1)克隆到本地    
    git clone https://gitee.com/renrenio/renren-generator.git  

 (2)刪除".git"後,將該專案放置到"gulimall"的根路徑下

2、搭建逆向工程環境
 (1)將"renren-generator"作為module加入gulimall總專案中

 (2)修改application.yml配置檔案

  修改mysql的連線資訊,這裡先以資料庫gulimal_pms為示例

 (3)修改generator.properties配置檔案

  修改mysql的連線資訊,這裡先以資料庫gulimal_pms為示例

 (4)啟動專案

    訪問:http://localhost/

  點選“renren-fast”,能夠看到他將資料庫gulimal_pms 的所有表都列舉出來了

  選擇所有的表,然後點選“生成程式碼”,將下載的"renren.zip"解壓後取出main檔案,放置到"gulimall-product"專案的main目錄中

  放進去之後,我們發現idea很多飄紅,因為很多依賴和工具包缺失,下面我們構建新的module gulimall-common來解決該問題

3、建立公共模組gulimall-common
  為了解決上面的包缺失問題,新建一個Module
 (1)New Module ——> Maven(選擇自己的jdk1.8)——> 下一步

  在gulimall主專案的pom.xml中也自動添加了<module>gulimall-common</module>

  (2)修改gulimall-common的pom.xml檔案

    我們把每個微服務裡公共的類和依賴放到common裡

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>gulimall</artifactId>
<groupId>com.atguigu.gulimall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>gulimall-common</artifactId>
<description>每一個微服務公共的依賴,bean,工具類等</description>

<dependencies>
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>

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

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.13</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>

</dependencies>

</project>
4)gulimall-product的pom.xml中分別引入gulimall-common作為依賴
  分別修改gulimall-coupon/member/order/ware/product 的pom.xml,加上如下依賴

    <dependency>
      <groupId>com.atguigu.gulimall</groupId>
      <artifactId>gulimall-common</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>

 (5)renren-fast----utils包下的Query和PageUtils、R、Constant複製到common專案的java/com.atguigu.common.utils下

 (6)把@RequiresPermissions這些註解掉,因為是shiro的

 (7)複製renren-fast中的xss包下的HTMLFilter和SQLFilter貼上到common的java/com.atguigu.common目錄下

    還複製了exception包下的RRException,對應的位置關係自己觀察一下就行

 (8)註釋掉product專案下類中的//import org.apache.shiro.authz.annotation.RequiresPermissions;,他是shiro的東西

 (9)註釋renren-generator\src\main\resources\template/Controller中所有的

    # @RequiresPermissions。

    # import org.apache.shiro.authz.annotation.RequiresPermissions;

  總之什麼報錯就去renren-fast裡面找。

4、測試整合商品服務gulimall-product裡的mybatisplus
(1)在common的pom.xml中匯入 
    <!-- 資料庫驅動 https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <!--tomcat裡一般都帶,Tomcat有帶,所以provided-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
 (2)調整以下gulimall-common的檔案
(3)在guilimall-product專案的resources目錄下新建application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.56.10:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root

# MapperScan
# sql對映檔案位置
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto

server:
port: 10000
(4)然後在主啟動類上加上註解@MapperScan()
package com.atguigu.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.atguigu.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {
public static void main(String[] args) {

SpringApplication.run(GulimallProductApplication.class, args);
}
}
(5)測試,先通過下面方法給資料庫新增內容
package com.atguigu.gulimall.product;

import com.atguigu.gulimall.product.entity.BrandEntity;
import com.atguigu.gulimall.product.service.BrandService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class GulimallProductApplicationTests {

@Autowired
BrandService brandService;

@Test
void contextLoads() {
BrandEntity brandEntity = new BrandEntity();
brandEntity.setDescript("hello");
brandEntity.setName("華為");
brandService.save(brandEntity);
System.out.println("儲存成功");
}

}
5、整合優惠券服務(gulimall-coupon)
(1)重新開啟generator逆向工程,修改generator.properties

  修改application.yml

(2)執行generator逆向工程,得到自動生成程式碼,把main放到gulimall-coupon的同級目錄下

(3)gulimall-coupon的pom.xml檔案新增gulimall-common依賴

<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

(4)新建gulimall-coupon的application.yml

spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto

server:
port: 7000

(5)在主啟動類上加上註解@MapperScan()

package com.atguigu.gulimall.coupon;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.atguigu.gulimall.coupon.dao")
@SpringBootApplication
public class GulimallCouponApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallCouponApplication.class, args);
}
}

(6)測試

  執行GulimallCouponApplication ,訪問http://localhost:7000/coupon/coupon/list

{"msg":"success","code":0,"page":{"totalCount":0,"pageSize":10,"totalPage":0,"currPage":1,"list":[]}}
6、整合使用者服務(gulimall-member)
(1)重新開啟generator逆向工程,修改generator.properties
   修改application.yml
(2)執行generator逆向工程,得到自動生成程式碼,把main放到gulimall-member的同級目錄下

(3)gulimall-member的pom.xml檔案新增gulimall-common依賴

<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(4)新建gulimall-member的application.yml
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto

server:
port: 8000
(5)在主啟動類上加上註解@MapperScan()
package com.atguigu.gulimall.member;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.atguigu.gulimall.member.dao")
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
(6)測試   執行GulimallMemberApplication ,訪問 http://localhost:8000/member/growthchangehistory/list
{"msg":"success","code":0,"page":{"totalCount":0,"pageSize":10,"totalPage":0,"currPage":1,"list":[]}}



7、整合訂單服務(gulimall-order)
(1)重新開啟generator逆向工程,修改generator.properties
   修改application.yml
2)執行generator逆向工程,得到自動生成程式碼,把main放到gulimall-order的同級目錄下
(3)gulimall-order的pom.xml檔案新增gulimall-common依賴
<dependency> <groupId>com.atguigu.gulimall</groupId> <artifactId>gulimall-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
(4)新建gulimall-order的application.yml spring: datasource: username: root password: root url: jdbc:mysql://192.168.56.10:3306/gulimall_oms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto server: port: 9000
(5)在主啟動類上加上註解@MapperScan()
package com.atguigu.gulimall.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.atguigu.gulimall.order.dao")
@SpringBootApplication
public class GulimallOrderApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallOrderApplication.class, args);
}
}
(6)測試   執行GulimallOrderApplication,訪問 http://localhost:9000/order/order/list
{"msg":"success","code":0,"page":{"totalCount":0,"pageSize":10,"totalPage":0,"currPage":1,"list":[]}}
8、整合倉儲服務(gulimall-ware)
(1)重新開啟generator逆向工程,修改generator.properties
  修改application.yml
2)執行generator逆向工程,得到自動生成程式碼,把main放到gulimall-ware的同級目錄下
(3)gulimall-ware的pom.xml檔案新增gulimall-common依賴
<dependency>
   <groupId>com.atguigu.gulimall</groupId>
   <artifactId>gulimall-common</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>4)新建gulimall-ware的application.yml
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_wms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto

server:
  port: 110005)在主啟動類上加上註解@MapperScan()
package com.atguigu.gulimall.ware;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.atguigu.gulimall.ware.dao")
@SpringBootApplication
public class GulimallWareApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallWareApplication.class, args);
}
}
6)測試   執行GulimallWareApplication,訪問 http://localhost:11000/ware/wareinfo/list
{"msg":"success","code":0,"page":{"totalCount":0,"pageSize":10,"totalPage":0,"currPage":1,"list":[]}}