准备环境

环境搭建要做以下准备,Intellij IDEA,Mysql,Maven,JDK8这四个基本工具, 你也可以用Eclipse ide工具,另外小程序开发请去微信官方下载小程序开发工具,前端vue开发建议webstrom 或 vscode。

JDK最低版本要求1.8

如果在tomcat中部署,要求至少Tomcat8及其以上版本

搭建2.0版本需要安装其中redis和zookeeper

项目模块结构

下载项目文件

本项目地址为:https://gitee.com/qiguliuxing/dts-shop 进入控制台输入以下命令将项目克隆到本地:

git clone https://gitee.com/qiguliuxing/dts-shop.git

其中VIP版本请联系官方管理人员(聚惠星qq群指定VIP管理员)进行购买授权,获取源码程序包。

基本目录结构

  • admin-ui 管理后端前端模块 PC版,支持响应式布局,暂不支持手机屏幕
  • doc 文档目录,包括sql脚本文件
  • dts-admin-api 管理后端api模块 (管理端后台启动本模块即可)
  • dts-core 核心业务模块,供两个api模块引用
  • dts-dao 数据访问层核心模块 ,供两个api模块引用
  • dts-wx-api 小程序api模块 (微信后台启动本模块即可
  • wx-mini-program 小程序前端代码
  • dts-job 分布式定时器模块 (VIP2.0版本独有
  • dts-merchant-api 商户管理后台 (VIP2.0版本独有,商户端后台启动本模块即可
  • merchant-ui 商户管理后台 前端模块 PC版(VIP2.0版本独有

其中,VIP2.0版本与开源版本模块不同,dts-job模块,dts-merchant-api模块,merchant-ui 模块开源版本及1.0版本不存在。

如果不需要商户端,则dts-merchant-api模块,merchant-ui 模块可以去除

数据库准备

创建数据库

本系统使用mysql数据库 建议 5.7 版本

在mysql中创建数据库 dts-shop对应的账户密码:dtsshop/dtsshop123, 并赋权限

CREATE DATABASE IF NOT EXISTS dts-shop DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 
CREATE USER 'dtsshop'@'%' IDENTIFIED BY 'dtsshop123';
GRANT ALL privileges ON dts-shop.* TO 'dtsshop'@'%';
flush privileges;

当然你可以基于myslq客户端工具创建数据库和用户,根据个人习惯操作,工具操作请自行百度解决。

建表和初始化数据

  1. 导入建表sql ,对应文件目录 :doc/dts-shop-表结构.sql
  2. 导入demo 数据,对应文件目录:doc/demo-data.sql
  3. VIP版本请参照 doc/data目录中脚本名称进行表的初始化或演示数据的导入

项目配置

管理前端api地址配置

配置文件按开发,测试demo,生产环境分别配置以下文件:

  • admin-ui/config/dev.env.js

  • admin-ui/config/demo.env.js

  • admin-ui/config/prod.env.js

    我们以dev开发环境为例,对配置文件的BASE_API参数做地址配置(默认配置管理api模块端口为8083)

    module.exports = {
        NODE_ENV: '"development"',
        ENV_CONFIG: '"dev"',
        BASE_API: '"http://localhost:8083/manager"'
    }
    

小程序端api地址配置

小程序配置文件:wx-mini-program/config/api.js ,配置参数 WxApiRoot,这里以本地开发环境为例,配置

var WxApiRoot = 'http://localhost:8080/wx/';

其中8080 为小程序api模块的端口

商户平台管理前端api地址配置(VIP版本独有)

配置文件按开发,测试demo,生产环境分别配置以下文件:

  • admin-ui/config/dev.env.js

  • admin-ui/config/demo.env.js

  • admin-ui/config/prod.env.js

    我们以dev开发环境为例,对配置文件的BASE_API参数做地址配置(默认配置管理api模块端口为8084)

    module.exports = {
        NODE_ENV: '"development"',
        ENV_CONFIG: '"dev"',
        BASE_API: '"http://localhost:8084/merchant"'
    }
    

日志配置

后台的日志使用的是logback,各个模块的日志配置文件为:logback-spring.xml文件,日志级别具体如何配置,请自行学习Spring Boot的日志配置和logback日志配置,这里我们只重点说明一下日志文件目录和日志文件名称的配置,以admin api模块为例:

 <property name="log.dir" value="./logs"/>
    <property name="log.name" value="admin"/>
    <property name="log.base.package" value="com.qiguliuxing.dts"/>
    <property name="log.level.console" value="all"/>
    <property name="rolling.pattern" value="%d{yyyy-MM-dd}"/>
    <property name="layout.pattern" value="%-5p %d [%t] %c{50} > %m%n"/>

微信后台模块请做参考,日志文件名可以 wx.yyyy-mm-dd 规则。

数据库连接配置

在dts-core模块的resources目录,多环境请具体配置对应指定文件,以dev环境为例,配置文件为:application-dev.yml文件中配置数据库连接和druid:

spring:
  datasource:
    druid:
      url:  jdbc:mysql://localhost:3306/dts-shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
      driver-class-name:  com.mysql.jdbc.Driver
      username:  dtsshop
      password:  dtsshop123
      initial-size:  10
      max-active:  50
      min-idle:  10
      max-wait:  60000
      pool-prepared-statements:  true
      max-pool-prepared-statement-per-connection-size:  20
      validation-query:  SELECT 1 FROM DUAL
      test-on-borrow:  false
      test-on-return:  false
      test-while-idle:  true
      time-between-eviction-runs-millis:  60000
      filters:  stat,wall

小程序及商户配置

小程序app配置

dts:
  # 开发者应该设置成自己的wx相关信息
  wx:
    app-id: xxxx
    app-secret: xxx
    mch-id: xxxx
    mch-key: xxxx
    notify-url: https://test.dtsshop.com/demo/order/dtsNotify
    # 商户证书文件路径
    # 请参考“商户证书”一节 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
    key-path: xxxxx

这里的app-idapp-secret需要开发者在微信公众平台注册获取。

mch-idmch-key需要开发者在微信商户平台注册获取

而这里的notify-url则应该是项目上线以后微信支付回调地址,当微信支付成功或者失败, 微信商户平台将向回调地址发生成功或者失败的数据,因此需要确保该地址是 dts-wx-api模块的WxOrderController类的payNotify方法所服务的API地址。

开发阶段可以采用一些技术实现临时外网地址映射本地,开发者可以百度关键字“微信 内网穿透”自行学习。

邮件通知配置

配置方式: 1. 邮件服务器开启smtp服务 2. 开发者在配置文件中设置enable的值true,然后其他信息设置相应的值。 sendto 可以配置多个邮箱通知地址,用逗号分割。

应用场景: 目前邮件通知场景也很简单,就是用户下单以后系统会自动向sendto用户发送一封邮件,告知用户下单的订单信息。 以后可能需要继续优化扩展。当然,如果不需要邮件通知订单信息,可以默认关闭即可。

#通知相关配置
  notify:
    mail:
      # 邮件通知配置,邮箱一般用于接收业务通知例如收到新的订单,sendto 定义邮件接收者,通常为商城运营人员
      enable: true
      host: smtp.aliyun.com
      username: dtsshop@aliyun.com
      password: xxx
      sendfrom: xxx@aliyun.com
      sendto: xxx@qq.com

短信通知配置

# 短消息模版通知配置
    # 短信息用于通知客户,例如发货短信通知,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值
    sms:
      enable: true
      appid: xxx
      appkey: xxx
      template:
      - name: paySucceed
        templateId: 112233
      - name: captcha
        templateId: 112233
      - name: ship
        templateId: 112233
      - name: refund
        templateId: 112233

配置方式: 1. 腾讯云短信平台或者阿里云短信平台申请,然后设置四个场景的短信模板; 2. 开发者在配置文件设置enable的值true,设置active的值tencentaliyun 3. 然后配置其他信息,例如腾讯云短信平台申请的appid等值。 这里只测试过腾讯云短信平台和阿里云短信平台,开发者需要自行测试其他短信云平台。

应用场景: 目前短信通知场景只支持支付成功、验证码、订单发送、退款成功四种情况。 以后可能需要继续优化扩展。

短信模板参数命名: 这里存在一个问题,即腾讯云短信的官方平台中申请短信模板格式的模板参数是数组, 例如“你好,验证码是{0},时间是{1}"; 而阿里云短信的官方平台中申请短信模板的模板参数是JSON, 例如“你好,验证码是{param1},时间是{param2}"。 为了保持当前代码的通用性,本项目采用数组传递参数,而对阿里云申请模板的参数做了一定的假设: 1. 腾讯云模块参数,申请模板时按照官方设置即可,例如“你好,验证码是{0},时间是{1}"; 2. 阿里云模板参数,本项目假定开发者在官方申请的参数格式应该采用"{ code: xxx, code1: xxx, code2: xxx }", 例如“你好,验证码是{code},时间是{code1}"。开发者可以查看AliyunSmsSender类的sendWithTemplate方法的 源代码即可理解。如果觉得不合理,可以自行调整相关代码。

物流配置

物流配置是查询商品物流信息,这里主要是基于第三方快递鸟服务

 # 快鸟物流查询配置
  express:
    enable: true
    appId: "xxxxxx"
    appKey: "xxxxxx"
    vendors:
    - code: "HTKY"
      name: "百世快递"
    - code: "YZBK"
      name: "邮政国内标快"
    - code: "ZTO"
      name: "中通快递"
    - code: "YTO"
      name: "圆通速递"
    - code: "YD"
      name: "韵达速递"
    - code: "YZPY"
      name: "邮政快递包裹"
    - code: "EMS"
      name: "EMS"
    - code: "DBL"
      name: "德邦快递"
    - code: "FAST"
      name: "快捷快递"
    - code: "ZJS"
      name: "宅急送"
    - code: "TNT"
      name: "TNT快递"
    - code: "UPS"
      name: "UPS"
    - code: "DHL"
      name: "DHL"
    - code: "FEDEX"
      name: "FEDEX联邦(国内件)"
    - code: "FEDEX_GJ"
      name: "FEDEX联邦(国际件)"

配置方式: 1. 快递鸟平台申请; 2. 开发者在配置文件设置enable的值true,然后其他信息设置 快递鸟平台中的appId和appKey。

应用场景: 小商场查询订单详情时,如果商品已发货,小商城后端会返回详细物流信息。

一部分快递公司(例如顺丰速运、申通快递等)的轨迹查询在开发环境下不支持, 具体支持情况或者使用限制请阅读官方资料

对象存储配置

# 对象存储配置
  storage:
    # 当前工作的对象存储模式,分别是local、aliyun、tencent、qiniu
    active: local
    # 本地对象存储配置信息
    local:
      storagePath: dts/storage
      # 这个地方应该是wx模块的WxStorageController的fetch方法对应的地址
      address: http://localhost:8080/demo/storage/
    # 阿里云对象存储配置信息
    aliyun:
      endpoint: oss-cn-guangzhou.aliyuncs.com
      accessKeyId: 111111
      accessKeySecret: xxxxxx
      bucketName: dts-shop
    # 腾讯对象存储配置信息
    # 请参考 https://cloud.tencent.com/document/product/436/6249
    tencent:
      secretId: 111111
      secretKey: xxxxxx
      region: xxxxxx
      bucketName: dts
    # 七牛云对象存储配置信息
    qiniu:
      endpoint: http://dtsshop.wx.clouddn.com
      accessKey: 111111
      secretKey: xxxxxx
      bucketName: dts

配置文件设置active的值local,表示当前对象存储模式是本地对象存储; 而storagePath是上传文件保存的路径;address则是访问文件的对外路径;

配置文件设置active的值aliyun,表示当前对象存储模式是阿里云对象存储;

配置文件设置active的值tencent,表示当前对象存储模式是腾讯云对象存储;

配置文件设置active的值qiniu,表示当前对象存储模式是七牛云对象存储;

redis配置(VIP2.0版本需要使用redis)

redis:
    lettuce:
      pool:
        max-active: 64
        max-wait: -1ms
        max-idle: 64
        min-idle: 0
    host: 127.0.0.1
    port: 6379
    password: 
    database: 2

其中配置的host参数为redis服务器ip地址 port为redis的端口 password 为redis的密码,没有密码可以不填 database 为redis库号

springboot开发环境

安装依赖库

采用Maven命令安装依赖库,操作命令参考:

cd dts-shop
mvn install

或者采用IDEA的Maven插件安装本项目依赖库,点击install

编译项目

cd dts-shop
mvn compile

此时可以看到,java代码模块多了target文件夹,里面是编译出的文件。或者采用IDEA的Maven插件编译本项目,点击compile

启动项目

 cd dts-shop
 mvn install
 mvn clean package
 java -Dfile.encoding=UTF-8 -jar dts-admin-api/target/dts-admin-api-0.0.1-SNAPSHOT-exec.jar
 java -Dfile.encoding=UTF-8 -jar dts-wx-api/target/dts-wx-api-0.0.1-SNAPSHOT-exec.jar
 java -Dfile.encoding=UTF-8 -jar dts-job/target/dts-job-2.0-SNAPSHOT.jar
 java -Dfile.encoding=UTF-8 -jar dts-merchant-api/target/dts-merchant-api-2.0-SNAPSHOT.jar

启动对应的jar文件无顺序问题,分别独立对应 管理后台接口 和 微信后台接口 ,或者如果采用IDEA,则找到对应模块的Application类 右键Run Application.main()方式运行该模块。

其中如果启动2.0版本的后台服务,需先确认redis环境是否正常,否则缓存数据存储依赖redis,java应用后台的服务器模块启动会失败 注意:如果启动dts-job模块,需确认zookeeper必须启动并连接正常。

小程序开发环境

  1. 安装微信小程序开发工具;

  2. 导入本项目的wx-mini-program模块文件夹;

  3. 编译前,请确定dts-wx-api模块已经运行,而wx-mini-program模块的config文件夹中的api.js已经设置正确的后端数据服务地址;

  4. 点击编译,如果出现数据和图片,则运行正常

注意:开发者编译以后,可以看到图片和数据,但是采用微信登录或者微信支付是肯定会失败的。需要配置正确的 appId,域名校验等信息,具体请参考微信官方说明。另外,需要注意 小程序,微信商户需同一个主题,且小程序上线后才能走通 微信支付,小程序客服,海报等包含二维码图片等功能。

管理前端开发环境

安装依赖库(商户端类似)

 cd dts-shop/admin-ui
 npm install -g cnpm --registry=https://registry.npm.taobao.org
 cnpm install

编译与运行

 cnpm run dev

然后,打开浏览器,输入http://localhost:9527。 如果出现管理后台登录页面,则表明管理后台的前端运行正常

results matching ""

    No results matching ""