第三天
中国加油,武汉加油!
篇幅较长,请配合目录观看
1. 系统名称
Gmall-Manage
2. 数据结构
sku+spu
数据结构 | 全称 | 汉意 |
---|---|---|
sku | stock keeping unitl | 标准的库存存储单元 |
spu | standard product until | 标准的产品单元 |
3. pms商品数据结构的划分
数据结构 | 含义 |
---|---|
pms_sku_xxx | sku的结构 |
pms_spu_xxx | spu的结构 |
pms_catalog_xxx | 类目的结构 |
pms_attr_xxx | 属性的结构 |
4. manage系统前后端分离
4.1 安装nodejs
npm install
4.2 解压gmall-admin前端项目
- conf 配置前端服务的ip和前端访问数据的后端服务的ip地址
- dev.env.js 前端访问数据的后端服务的ip地址
- index.js 前端服务器的端口
4.3 用npm命令编译和启动前端项目
修改conf目录下的dev.env.js和index.js的端口为127.0.0.1
在gmall-admin目录下
npm run dev
账号:admin
密码:admin
4.4 前后端请求格式
- 一般前端会用post向后端发送请求(把参数封装到json中)
- 请求格式 @RequestBody
- 返回格式 @ResponseBody
5. 商城的商品录入功能
- 三级分类的查询
- 商品的平台属性列表的增删改查
- 商品spu的添加
Spu列表查询
spu的销售属性、属性值、Fastdfs图片上传 - 商品sku的添加
sku信息、sku关联的销售属性、sku关联的平台属性、sku图片
6. 新建gmall-manage-service项目(springboot)
6.1 继承gmall-parent和引入gmall-api和gmall-service-util依赖
<parent>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
...
<dependency>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-service-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
6.2 写application.properties
# 项目配置
server.port=8081
# jdbc配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/gmall
spring.datasource.username=root
spring.datasource.password=123456
# mybatis配置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
# 驼峰
mybatis.configuration.map-underscore-to-camel-case=true
# 别名
mybatis.type-aliases-package=com.wpj.gmall.bean
# 日志级别
logging.level.root=info
# dubbo的配置
# dubbo中的服务名称
spring.dubbo.application=manage-service
# dubbo的通讯协议名称
spring.dubbo.protocol.name=dubbo
# zookeeper注册中心的地址
spring.dubbo.registry.address=47.98.33.215:2181
# zookeeper的通讯协议的名称
spring.dubbo.registry.protocol=zookeeper
# dubbo的服务的扫描路径
spring.dubbo.base-package=com.wpj.gmall
6.3 写程序入口
package com.wpj.gmall.manage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = {"com.wpj.gmall.manage.mapper"})
public class GmallManageServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GmallManageServiceApplication.class, args);
}
}
7. 新建gmall-manage-web项目(springboot)
7.1 继承gmall-parent和引入gmall-api和gmall-web-util依赖
<parent>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.wpj.gmall</groupId>
<artifactId>gmall-web-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
7.2 新建Controller
package com.wpj.gmall.manage.controller;
import com.wpj.gmall.bean.PmsBaseCatalog1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class CatalogController {
@RequestMapping("getCatalog1")
@ResponseBody
public List<PmsBaseCatalog1> getCatalog1(){
return null;
}
}
7.3 写application.properties
# 服务端口
server.port=8082
# 日志级别
logging.level.root=info
# dubbo的配置
# dubbo中的服务名称
spring.dubbo.application=manage-web
# dubbo的通讯协议名称
spring.dubbo.protocol.name=dubbo
# zookeeper注册中心的地址
spring.dubbo.registry.address=47.98.33.215:2181
# zookeeper的通讯协议的名称
spring.dubbo.registry.protocol=zookeeper
# dubbo的服务的扫描路径
spring.dubbo.base-package=com.wpj.gmall
7.4 新建一个Service在gmall-api中
7.5 在gmall-manage-service写一个实现
package com.wpj.gmall.manage.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.wpj.gmall.bean.PmsBaseCatalog1;
import com.wpj.gmall.manage.mapper.PmsCatalog1Mapper;
import com.wpj.gmall.manage.mapper.PmsCatalog2Mapper;
import com.wpj.gmall.manage.mapper.PmsCatalog3Mapper;
import com.wpj.gmall.service.ICatalogService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Service
public class CatalogServiceImpl implements ICatalogService {
@Autowired
private PmsCatalog1Mapper pmsCatalog1Mapper;
@Autowired
private PmsCatalog2Mapper pmsCatalog2Mapper;
@Autowired
private PmsCatalog3Mapper pmsCatalog3Mapper;
@Override
public List<PmsBaseCatalog1> getCatalog1() {
return pmsCatalog1Mapper.selectAll();
}
}
7.6 在gmall-manage-service写三个mapper接口
package com.wpj.gmall.manage.mapper;
import com.wpj.gmall.bean.PmsBaseCatalog1;
import tk.mybatis.mapper.common.Mapper;
public interface PmsCatalog1Mapper extends Mapper<PmsBaseCatalog1> {
}
package com.wpj.gmall.manage.mapper;
import com.wpj.gmall.bean.PmsBaseCatalog2;
import tk.mybatis.mapper.common.Mapper;
public interface PmsCatalog2Mapper extends Mapper<PmsBaseCatalog2> {
}
package com.wpj.gmall.manage.mapper;
import com.wpj.gmall.bean.PmsBaseCatalog3;
import tk.mybatis.mapper.common.Mapper;
public interface PmsCatalog3Mapper extends Mapper<PmsBaseCatalog3> {
}
8. 启动gmall-manage-service和gmall-manage-web的程序入口
9. 前后端跨域问题
9.1 前端和后端因为来自不同的网域,所以在http的安全协议策略下不信任
9.2 解决方案
- 在springmvc的控制层加入@CrossOrigin跨域访问的注解
10. 列表的查询
10.1 gmall-manage-web的Controller添加方法
@RequestMapping("getCatalog2")
@ResponseBody
public List<PmsBaseCatalog2> getCatalog2(String catalog1Id){
List<PmsBaseCatalog2> catalog2s = iCatalogService.getCatalog2(catalog1Id);
return catalog2s;
}
@RequestMapping("getCatalog3")
@ResponseBody
public List<PmsBaseCatalog3> getCatalog3(String catalog2Id){
List<PmsBaseCatalog3> catalog3s = iCatalogService.getCatalog3(catalog2Id);
return catalog3s;
}
10.2 gmall-api的Service添加方法
List<PmsBaseCatalog2> getCatalog2(String catalog1Id);
List<PmsBaseCatalog3> getCatalog3(String catalog2Id);
10.3 gmall-manage-service的ServiceImpl添加方法
@Override
public List<PmsBaseCatalog2> getCatalog2(String catalog1Id) {
PmsBaseCatalog2 pmsBaseCatalog2 = new PmsBaseCatalog2();
pmsBaseCatalog2.setCatalog1Id(catalog1Id);
List<PmsBaseCatalog2> pmsBaseCatalog2s = pmsCatalog2Mapper.select(pmsBaseCatalog2);
return pmsBaseCatalog2s;
}
@Override
public List<PmsBaseCatalog3> getCatalog3(String catalog2Id) {
PmsBaseCatalog3 pmsBaseCatalog3 = new PmsBaseCatalog3();
pmsBaseCatalog3.setCatalog2Id(catalog2Id);
List<PmsBaseCatalog3> pmsBaseCatalog3s = pmsCatalog3Mapper.select(pmsBaseCatalog3);
return pmsBaseCatalog3s;
}
11. 商品平台属性的管理功能(增删改查)
11.1 根据三级分类的id查询商品平台属性
11.2 写PmsBaseAttrInfoMapper和PmsBaseAttrValueMapper
package com.wpj.gmall.manage.mapper;
import com.wpj.gmall.bean.PmsBaseAttrInfo;
import tk.mybatis.mapper.common.Mapper;
public interface PmsBaseAttrInfoMapper extends Mapper<PmsBaseAttrInfo> {
}
package com.wpj.gmall.manage.mapper;
import com.wpj.gmall.bean.PmsBaseAttrValue;
import tk.mybatis.mapper.common.Mapper;
public interface PmsBaseAttrValueMapper extends Mapper<PmsBaseAttrValue> {
}
11.3 写IAttrService及其Impl
package com.wpj.gmall.service;
import com.wpj.gmall.bean.PmsBaseAttrInfo;
import java.util.List;
public interface IAttrService {
List<PmsBaseAttrInfo> attrInfoList(String catalog3Id);
}
package com.wpj.gmall.manage.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.wpj.gmall.bean.PmsBaseAttrInfo;
import com.wpj.gmall.manage.mapper.PmsBaseAttrInfoMapper;
import com.wpj.gmall.manage.mapper.PmsBaseAttrValueMapper;
import com.wpj.gmall.service.IAttrService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Service
public class AttrServiceImpl implements IAttrService {
@Autowired
private PmsBaseAttrInfoMapper pmsBaseAttrInfoMapper;
@Autowired
private PmsBaseAttrValueMapper pmsBaseAttrValueMapper;
@Override
public List<PmsBaseAttrInfo> attrInfoList(String catalog3Id) {
PmsBaseAttrInfo pmsBaseAttrInfo = new PmsBaseAttrInfo();
pmsBaseAttrInfo.setCatalog3Id(catalog3Id);
List<PmsBaseAttrInfo> pmsBaseAttrInfos = pmsBaseAttrInfoMapper.select(pmsBaseAttrInfo);
return pmsBaseAttrInfos;
}
}
11.4 写Controller
package com.wpj.gmall.manage.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.wpj.gmall.bean.PmsBaseAttrInfo;
import com.wpj.gmall.service.IAttrService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@CrossOrigin
public class AttrController {
@Reference
private IAttrService iAttrService;
@RequestMapping("attrInfoList")
@ResponseBody
public List<PmsBaseAttrInfo> attrInfoList(String catalog3Id) {
return iAttrService.attrInfoList(catalog3Id);
}
}
11.5 重启程序入口测试
12 添加平台属性
12.1 Controller添加方法
@RequestMapping("saveAttrInfo")
@ResponseBody
public String saveAttrInfo(@RequestBody PmsBaseAttrInfo pmsBaseAttrInfo){
return "success";
}