portal :www.upupgogogo.cn
admin : admin.upupgogogo.cn(xiaowang 147258 可以查看别改)
资料以及源码:learning.upupgogogo.cn
1.准备的工具和环境
1.1Windows工具:jdk,tomcat,meavn,git,mysql,测试软件postman(其他的也行),支付宝加密工具(支付接口所需),natapp(支付宝回调需要内网穿透)
1.2.linux(线上):jdk,tomcat,meavn,git,mysql,nginx,ftp,防火墙的配置,shell脚本
基本环境配置:
export JAVA_HOME=/usr/java/jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export MAVEN_HOME=/developer/apache-maven-3.0.5
export NODE_HOME=/usr/local/node-v4.4.7-linux-x64
export RUBY_HOME=/usr/local/ruby
export CATALINA_HOME=/developer/apache-tomcat-7.0.73
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/git/bin:$CATALINA_HOME/bin:$MAVEN_HOME/bin:$NODE_HOME/bin:/usr/local/bin:$RUBY_HOME/bin
sell:
echo "===========进入git项目happymmall目录============="
cd /developer/git-repository/upupgogogo
echo "==========git切换分之到upupgogogo-v1.0==============="
git checkout v1.0
echo "==================git fetch======================"
git fetch
echo "==================git pull======================"
git pull
echo "===========编译并跳过单元测试===================="
mvn clean package -Dmaven.test.skip=true
echo "============删除旧的ROOT.war==================="
rm /developer/apache-tomcat-7.0.73/webapps/ROOT.war
echo "======拷贝编译出来的war包到tomcat下-ROOT.war======="
cp /developer/git-repository/upupgogogo/target/mmall.war /developer/apache-tomcat-7.0.73/webapps/ROOT.war
echo "============删除tomcat下旧的ROOT文件夹============="
rm -rf /developer/apache-tomcat-7.0.73/webapps/ROOT
echo "====================关闭tomcat====================="
/developer/apache-tomcat-7.0.73/bin/shutdown.sh
echo "================sleep 10s========================="
for i in {1..10}
do
echo $i"s"
sleep 1s
done
echo "====================启动tomcat====================="
/developer/apache-tomcat-7.0.73/bin/startup.sh
2.数据库的设计
2.1简单说明
数据库整体设计没有采用外键,有些字段会直接写入,操作可能会麻烦,但是查询的效率会比较高,删除的耦合度也降低了许多,整体都设计了时间戳,以及较好的索引。
2.2各个表的特别说明
用户表:这里把门户和后台整合在一起,用role字段来辨别,这里通过question和answer来帮助用户找回密码
分类表:通过parent_id字段来查询上级目录和子目录,需要特别说明的是parent_id为0时是顶级目录
商品表:sub_images用于保存该商品所有图片的所存在ftp服务器的地址,main_image把sub_images的第一个图片地址保存在里面,用于前端快速的查询,status判断是否下架,stock记录库存
购物车表:checked判断是否勾选,用来处理商品总价,quantity来记录该商品总价格,user_id和product_id来分别记录用户的id和商品id
地址表:这里就是记录一下用户的地址
订单总表:除了设计id字段,还有一个order_id来记录一个随机生成的订单号,status来记录订单的状态,payment_type来表达支付的平台,多加四个时间戳,payment_time支付时间,send_time发货时间,收货时间,close_time订单关闭时间,
订单子表:这里储存了product_id,product_name,product_image,虽然可以通过product_id来查询商品信息,但是由于这里不需要特别多商品的字段信息,可以直接存储这些字段,优化了查询时间
支付表:user_id,order_no,platform_number,pay_platform分别表示用户id,订单号,支付流水号,支付平台
3.后台初步设计
3.1整体的抽取
1.定义一个高复用的响应对象(statue,msg,date)用来返回给前端
2.定义定义一个枚举用来封装一些状态(code,msg)
3.定义一个const用来封装一些常量,避免在项目中硬编码
3.2VO的设计
由于前端多需要的数据可能会和你设计的pojo有差别,这时你需要从数据中提取pojo后转换成所需要的vo
3.3工具类的定义
1.需要定义一个读取配置文件的工具类,这需要值得一提的就是可以在静态代码块里面可以进行io的读取并放在可以储存键值对的数据结构,在整个项目运行过程中只加载一次
2.定义一个FTPUtil,这个工具类主要用来连接ftp服务器并上传文件
3.定义一个控制精度的工具类,由于jdk所提供的两个浮点类型数据(double,float)都有精度缺失的问题,通过BigDecimal来进行转换
4.定义一个md5加密的工具类,避免数据泄露
4.后台接口设计
4.1后台接口整体设计思想
control接受到数据后先进行权限控制,然后把参数给service,然后在service进行参数控制,根据需要在dao进行dt操作提取pojo,在service封装vo再通过高复用响应对象封装好vo返回给control,control通过json序列化ServerResponse返回给前端
4.2user接口设计
这里主要说明的就是用户找回密码的接口设计,定义一个token,这里token的主要作用就是在一个有效时间保存一个键值对
4.3category接口设计
这里主要设计了一个递归算法来把一个id的所有下级id查询出来
4.4product接口设计
这里主要就是常规的查询,分页(分页采用PageInfo),修改状态,上传或更新商品(在上传或者更新之前,前端会先进行图片的上传,然后前端获得图片的地址)
4.5cart接口设计
这里封装了一个高复用的方法,每次进行cart操作后都会调用这个高复用的方法来进行封装CartVo,处理库存
4.6支付接口设计
由于支付和订单两个接口耦合度很高,只定义了一个orderControl来写支付和订单接口,支付接口主要是先把订单号和商品信号等等一些信息传给支付宝,然后获得支付二维码并存储在ftp服务器上,然后写一个支付宝回调接口,用来更新订单信息和上传支付信息到dt,当支付成功后返回success给支付宝(停止回调)