JAVA全系列 教程
3762个小节阅读:7095.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在商品服务模块添加RocketMQ起步依赖
xxxxxxxxxx
<!-- rocketmq -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.3</version>
</dependency>
在shopping_goods_service-dev.yaml
中添加RocketMQ相关配置
xxxxxxxxxx
rocketmq:
# nameserver地址
name-server: 192.168.0.99:9876
producer:
# 生产组
group: my_group1
# 发送消息超时时间
send-message-timeout: 3000
在商品服务模块的resources
目录下建立META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件,添加如下内容:
xxxxxxxxxx
org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration
修改商品服务实现类,增删改商品后发送消息
xxxxxxxxxx
@DubboService
@Transactional
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsMapper goodsMapper;
@Autowired
private GoodsImageMapper goodsImageMapper;
@Autowired
private RocketMQTemplate rocketMQTemplate; // RocketMQ工具类
// 同步商品数据主题
private final String SYNC_GOOD_QUEUE = "sync_goods_queue";
// 删除商品数据主题
private final String DEL_GOOD_QUEUE = "del_goods_queue";
@Override
public void add(Goods goods) {
// 插入商品数据
goodsMapper.insert(goods);
// 插入图片数据
Long goodsId = goods.getId(); // 获取商品主键
List<GoodsImage> images = goods.getImages(); // 商品图片集合
for (GoodsImage image : images) {
image.setGoodsId(goodsId); // 给图片设置商品id
goodsImageMapper.insert(image); // 插入图片
}
// 插入商品_规格项数据
// 1.获取规格
List<Specification> specifications = goods.getSpecifications();
// 2.获取规格项
List<SpecificationOption> options = new ArrayList();
// 遍历规格,获取规格中的所有规格项
for (Specification specification : specifications) {
options.addAll(specification.getSpecificationOptions());
}
// 遍历规格项,插入商品_规格项数据
for (SpecificationOption option : options) {
goodsMapper.addGoodsSpecificationOption(goodsId,option.getId());
}
// 将商品数据同步到ES中
GoodsDesc goodsDesc = findDesc(goodsId);
rocketMQTemplate.syncSend(SYNC_GOOD_QUEUE,goodsDesc);
}
@Override
public void update(Goods goods) {
// 删除旧图片数据
Long goodsId = goods.getId(); // 获取商品主键
QueryWrapper<GoodsImage> queryWrapper = new QueryWrapper();
queryWrapper.eq("goodsId",goodsId);
goodsImageMapper.delete(queryWrapper);
// 删除旧规格数据
goodsMapper.deleteGoodsSpecificationOption(goodsId);
// 修改商品数据
goodsMapper.updateById(goods);
// 插入图片数据
List<GoodsImage> images = goods.getImages(); // 商品图片集合
for (GoodsImage image : images) {
image.setGoodsId(goodsId); // 给图片设置商品id
goodsImageMapper.insert(image); // 插入图片
}
// 插入商品_规格项数据
// 1.获取规格
List<Specification> specifications = goods.getSpecifications();
// 2.获取规格项
List<SpecificationOption> options = new ArrayList();
// 遍历规格,获取规格中的所有规格项
for (Specification specification : specifications) {
options.addAll(specification.getSpecificationOptions());
}
// 遍历规格项,插入商品_规格项数据
for (SpecificationOption option : options) {
goodsMapper.addGoodsSpecificationOption(goodsId,option.getId());
}
// 将商品数据同步到ES中
GoodsDesc goodsDesc = findDesc(goodsId);
rocketMQTemplate.syncSend(SYNC_GOOD_QUEUE,goodsDesc);
}
@Override
public Goods findById(Long id) {
return goodsMapper.findById(id);
}
@Override
public void putAway(Long id, Boolean isMarketable) {
goodsMapper.putAway(id,isMarketable);
// 上架时数据同步到ES,下架时删除ES数据
if (isMarketable){
// 将商品数据同步到ES中
GoodsDesc goodsDesc = findDesc(id);
rocketMQTemplate.syncSend(SYNC_GOOD_QUEUE,goodsDesc);
}else {
rocketMQTemplate.syncSend(DEL_GOOD_QUEUE,id);
}
}
@Override
public Page<Goods> search(Goods goods, int page, int size) {
QueryWrapper<Goods> queryWrapper = new QueryWrapper();
// 判断商品名不为空
if (goods != null && StringUtils.hasText(goods.getGoodsName())){
queryWrapper.like("goodsName",goods.getGoodsName());
}
Page page1 = goodsMapper.selectPage(new Page(page, size), queryWrapper);
return page1;
}
@Override
public List<GoodsDesc> findAll() {
return goodsMapper.findAll();
}
@Override
public GoodsDesc findDesc(Long id) {
return goodsMapper.findDesc(id);
}
}