来客推java版本工程主要使用Springboot、Dubbo、Maven 来开发;
遵循阿里java开发规范 开发工具有规范的插件。
| 开发准备
环境 | 版本 | 备注 |
---|---|---|
JDK | 1.8.211 | java环境 |
Mysql | 5.5-5.6 | 数据存储 |
Redis | 6.2 | 服务信息注册中心 |
zookeeper | 3.5 | dubbo注册中心 |
Maven | 3.6.3 | 代码构建 |
项目结构介绍
1、整体结构介绍
此结构为通用结构,不包括插件模块的结构
laiketui-java-app #整体项目 ├── pom.xml #maven 文件 ├── laike-admin-store #pc管理后台 ├── laike-admin-store-api #pc管理后台接口 ├── laike-app #移动端 ├── laike-app-service-api #移动端接口 ├── laike-common #公共模块 ├── laike-common-serviceapi #公共模块接口 ├── laike-coupon #优惠券模块 ├── laike-coupon-service-api #优惠券模块接口 ├── laike-domain #所有实体/vo类 ├── laike-file #资源管理文件上传 ├── laike-file-api #资源管理文件上传接口 ├── laike-gateway #网关 ├── laike-mch #多店铺模块 ├── laike-mch-service-api #多店铺模块接口 ├── laike-order #订单模块 ├── laike-order-serice-api #订单模块接口 ├── laike-payment #支付模块 ├── laike-payment-service-api #支付模块接口 ├── laike-products #商品模块 ├── laike-products-service-api #商品模块接口 ├── laike-freight #运费模块 ├── laike-freight-service-api #运费模块接口 ├── laike-invoice #发票模块 ├── laike-invoice-service-api #发票模块接口 ├── laike-store-pc #pc商城模块 ├── laike-store-pc-api #pc商城模块接口 ├── laike-plugin-distribution #分销模块 ├── laike-plugin-api #分销模块接口 ├── laike-task #定时任务模块 ├── laike-user #用户模块 └── laike-user-service-api #用户模块接口
此树结构为插件模块介绍
laiketui-java-app # ├── laike-seckill #秒杀 ├── laike-seckill-service-api #秒杀接口 ├── laike-diy #首页diy ├── laike-diy-service-api #首页diy接口 ├── laike-presell #预售模块 ├── laike-presell-service-api #预售模块接口 ├── laike-member #秒杀 ├── laike-member-service-api #秒杀接口 ├── laike-plugin-common #公共模块 ├── laike-plugin-integral #积分模块 ├── laike-plugin-integral-api #积分接口 ├── laike-auction #竞拍接口 └── laike-auction-service-api #竞拍模块接口
2、单模块结构介绍
laike-xxxx 单个模块结构
laike-xxxx #模块名 ├── laike-xxxx.iml ├── mvnw ├── mvnw.cmd ├── pom.xml #maven构建文件 ├── src #源码文件 │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── laiketui │ │ │ └── xxxx #模块名 │ │ │ ├── LaikeXxxxApplication.java #模块启动类 │ │ │ ├── common #模块内通用文件夹 │ │ │ │ ├── consts #模块内常量文件夹 │ │ │ │ └── uitls #模块帮助类文件夹 │ │ │ ├── controller #控制层代码 │ │ │ └── service #服务层代码 │ │ └── resources │ │ ├── application.yml #模块配置文件 │ │ ├── logback-spring.xml #日志配置文件 │ │ ├── static #静态资源 │ │ └── templates #静态模版 │ └── test #测试代码 └── target #模块编译后文件存放文件夹
!!!!!! LaikeXxxxApplication.java 模块启动类 不要在开发工具里面配tomcat
!!!!!! LaikeXxxxApplication.java 模块启动类 不要在开发工具里面配tomcat
!!!!!! LaikeXxxxApplication.java 模块启动类 不要在开发工具里面配tomcat
一、网关 laike-gateway
1、网关入参数格式
入参 | 是否必填 | 类型 | 备注 |
---|---|---|---|
api | 是 | string | 接口名api的取值 |
accessId | 否 | string | token值 |
image | 否 | MultipartFile | 单图片 |
file | 否 | MultipartFile | 单文件 |
files | 否 | MultipartFile | 多文件 |
exportType | 否 | string | 是否导出标志 1导出 0否 |
store_id | — | int | 商城id:移动端必填;管理后台pc端控制台非必填;具体商城必填; |
store_type | 是 | int | 端类型 1:微信小程序 2:app 7:H5 8:管理后台 |
… | 否 | 其他用户自定义参数可以同时拼入请求中 |
{ api: 'app.xx.kkk', id: this.id, store_type:7, store_id:1 }
注:api的取值来源有两种:
- @HttpApiMethod(urlMapping=”com.laiketui.getuser”) urlMapping的值 com.laiketui.getuser 或 apiKey 的值
- @DubboApiMethod(apiKey = “app.aution.index”) apiKey的值 app.aution.index
2、控制层统一使用Result封装接口返回的结果
出参 名称 类型 备注 message 操作消息 string 消息 code 操作编码 string 请求code data 操作结果 Object 操作结果 { "code":"200", "message":"操作成功", "data":{ "activityNum":137, "returnNum":25, "shiWuNum":253, "orderNum":390 } }二、服务注册
1、Http服务信息注册
在spring 控制层的controller代码方法上面使用注解 @HttpApiMethod(urlMapping=”com.laiketui.getuser”) 完成http服务注册。
@ApiOperation("添加购物车api") @PostMapping("addCart") @HttpApiMethod(urlMapping = "app.product.add_cart") public Result addCart(AddCartVo vo) { try { return Result.success(productService.addCart(vo)); } catch (LaiKeAPIException e) { return Result.error(e.getCode(), e.getMessage()); } }2、Dubbo服务新增注册
在服务层的serviceImpl类的方法上面使用注解 @HttpApiMethod(urlMapping=”com.laiketui.getuser”) 完成Dubbo服务注册。前端开发人员调用的时候指定api参数的值为 apiKey的值 ,通过网关完成dubbo服务的掉用。
@DubboApiMethod(apiKey = "app.aution.index") public Map<String, Object> index(MainVo vo, String type) throws LaiKeAPIException { return null; }三、配置信息 application.yml
Redis 配置
- [ ] laike-core 配置 application-dev/prod.yml
redis: database: 0 host: localhost port: 6339 password: laiketui.com- Mysql配置
datasource: driver-class-name: com.mysql.cj.jdbc.Driver ##############修改配置################ url: jdbc:mysql://localhost:3306/v3_db?useUnicode=true&autoReconnect=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false username: root password: root321 ##############修改配置################ type: com.alibaba.druid.pool.DruidDataSource initialSize: 1 minIdle: 1 maxIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true filters: stat,wall maxPoolPreparedStatementPerConnectionSize: 20 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000- zookeeper配置:每个模块单独配置 application.yml
dubbo: application: name: laike-app registry: id: zookeeper-registryapplication.yml protocol: zookeeper # 根据实际情况修改ip和端口号 address: 127.0.0.1:2181 protocol: name: dubbo # 各个模块目前有默认的端口配置 若端口被占用 可以修改此端口 port: 20991 accesslog: dubbo-access.log provider: retries: 0 timeout: 600000 delay: -1 filter: -exception,dubboExceptionFilter monitor: protocol: registry- 其他配置说明
server: # tomcat端口 port: 18004 # 自定义配置 node: # http服务注册的节点所在ip 默认127.0.0.1 分布式部署的时候可以修改为具体的ip地址 ip: 127.0.0.1 # 微信支付的p12证书保存位置:不同的操作系统需要修改保存的位置,注意需要读写权限 # 位置不对的话影响微信支付的退款操作 # 注:此配置仅 laike-admin-store 模块需要 wx-certp12-path: C:/certsmaven 下载第三方jar包 ,邮件中的m2.zip文件
运行 启动各个模块的XxxApplication.java类main方法 启动模块
安装laike-root包
# -Dfile root的实际文件位置 mvn install:install-file -Dfile=/path/laike-root-0.0.1-SNAPSHOT.jar -DgroupId=com.laiketui -DartifactId=laike-root -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar安装 xxl-job包
### -Dfile xx-xjob的实际文件位置 mvn install:install-file -Dfile=C:\xxl-job-core-2.3.0-SNAPSHOT.jar -DgroupId=com.xuxueli -DartifactId=xxl-job-core -Dversion=2.3.0-SNAPSHOT -Dpackaging=jarAPI接口文档在线访问地址:
http://ip:模块端口/模块上下文/swagger-ui.html
模块上下端口和模块上下问在对应模块的application.yml 文件开头 server: port_register: 18001 port: 模块端口 ssl: enabled: false tomcat: uri-encoding: UTF-8 servlet: context-path: /模块上下文
如果要用域名去访问则需要配置nginx 转发
启动模块说明
除了 以下命名的模块不需要启动之外其他的需要
laike-xx-api laike-xx-service-api laike-common-serviceapi laike-common laike-domain
store_type 字段说明
/** * app */ int STORE_TYPE_APP = 2; /** * h5 */ int STORE_TYPE_H5 = 2; /** * 微信小程序 */ int STORE_TYPE_WX_MP = 1; /** * pc店铺 */ int STORE_TYPE_PC_MCH = 7; /** * pc商城 */ int STORE_TYPE_PC_MALL = 6; /** * pc管理后台 */ int STORE_TYPE_PC_ADMIN = 8; /** * 支付宝小程序 */ int STORE_TYPE_ALI_MP = 3; /** * 字节跳动小程序 */ int STORE_TYPE_BYTEDANCE_MP = 4; /** * 百度小程序 */ int STORE_TYPE_BAIDU_MP = 5;- ordertype 字段说明
/** * 普通订单 */ String ORDERS_HEADER_GM = "GM"; /** * 砍价头部 */ String ORDERS_HEADER_KJ = "KJ"; /** * 拼团订单 */ String ORDERS_HEADER_PT = "PT"; /** * 预售订单 */ String ORDERS_HEADER_PS = "PS"; /** * 开团订单 */ String ORDERS_HEADER_KT = "KT"; /** * 分销订单 */ String ORDERS_HEADER_FX = "FX"; /** * 竞拍 */ String ORDERS_HEADER_JP = "JP"; /** * 特惠 */ String ORDERS_HEADER_TH = "TH"; /** * 秒杀 */ String ORDERS_HEADER_MS = "MS"; /** * 竞拍 */ String ORDERS_HEADER_AC = "AC"; /** * 充值 */ String ORDERS_HEADER_CZ = "CZ"; /** * 积分商城 */ String ORDERS_HEADER_IN = "IN"; /** * vip订单 */ String ORDERS_HEADER_DJ = "DJ"; /** * 平台拼团订单 */ String PTHD_ORDER_PP = "PP"; /** * 平台秒杀订单 */ String PTHD_ORDER_PM = "PM"; /** * 虚拟订单 */ String ORDERS_HEADER_VI = "VI"; /** * 店铺保证金 - 临时表+保证金表 */ String ORDERS_HEADER_MCH_PROMISE = "PR"; /** * 平台标识 */ String PTHD_ORDER_HEADER = "pthd_";
系统配置信息修改示意图,目前没有的模块请忽略不计