准备环境
环境搭建要做以下准备,Intellij IDEA,Mysql,Maven,JDK8这四个基本工具, 你也可以用Eclipse ide工具,另外小程序开发请去微信官方下载小程序开发工具,前端vue开发建议webstrom 或 vscode。
- jdk安装
- mysql安装
- 微信开发工具
- nodejs
- maven
- Intellij IDEA 安装IDEA Community,建议安装Maven插件和Git插件
- redis安装 2.0版本需要
- zookeeper安装 2.0版本job模块依赖此分布式应用程序协调服务
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客户端工具创建数据库和用户,根据个人习惯操作,工具操作请自行百度解决。
建表和初始化数据
- 导入建表sql ,对应文件目录 :doc/dts-shop-表结构.sql
- 导入demo 数据,对应文件目录:doc/demo-data.sql
- 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-id
和app-secret
需要开发者在微信公众平台注册获取。
mch-id
和mch-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
的值tencent
或aliyun
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必须启动并连接正常。
小程序开发环境
安装微信小程序开发工具;
导入本项目的wx-mini-program模块文件夹;
编译前,请确定dts-wx-api模块已经运行,而wx-mini-program模块的config文件夹中的api.js已经设置正确的后端数据服务地址;
点击
编译
,如果出现数据和图片,则运行正常
注意:开发者编译以后,可以看到图片和数据,但是采用微信登录或者微信支付是肯定会失败的。需要配置正确的 appId,域名校验等信息,具体请参考微信官方说明。另外,需要注意 小程序,微信商户需同一个主题,且小程序上线后才能走通 微信支付,小程序客服,海报等包含二维码图片等功能。
管理前端开发环境
安装依赖库(商户端类似)
cd dts-shop/admin-ui
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
编译与运行
cnpm run dev
然后,打开浏览器,输入http://localhost:9527
。 如果出现管理后台登录页面,则表明管理后台的前端运行正常