From cd90d93f3e4c1b14ea947004aefe73f56394d943 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Fri, 5 Apr 2024 22:23:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8D=B7=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/service-util/pom.xml | 5 + .../common/config/MQProducerAckConfig.java | 53 +++++++ .../client/product/ProductFeignClient.java | 4 + .../controller/CouponInfoController.java | 97 +++++++++++-- .../activity/mapper/CouponRangeMapper.java | 9 ++ .../activity/service/CouponInfoService.java | 44 ++++++ .../service/impl/CouponInfoServiceImpl.java | 132 ++++++++++++++++-- .../product/api/ProductInnerController.java | 6 + 8 files changed, 330 insertions(+), 20 deletions(-) create mode 100644 common/service-util/src/main/java/com/atguigu/ssyx/common/config/MQProducerAckConfig.java create mode 100644 service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponRangeMapper.java diff --git a/common/service-util/pom.xml b/common/service-util/pom.xml index 8662030..05dde03 100644 --- a/common/service-util/pom.xml +++ b/common/service-util/pom.xml @@ -23,6 +23,11 @@ common-util 1.0-SNAPSHOT + + com.atguigu + rabbit-util + 1.0-SNAPSHOT + com.atguigu model diff --git a/common/service-util/src/main/java/com/atguigu/ssyx/common/config/MQProducerAckConfig.java b/common/service-util/src/main/java/com/atguigu/ssyx/common/config/MQProducerAckConfig.java new file mode 100644 index 0000000..710ed79 --- /dev/null +++ b/common/service-util/src/main/java/com/atguigu/ssyx/common/config/MQProducerAckConfig.java @@ -0,0 +1,53 @@ +package com.atguigu.ssyx.common.config; + +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class MQProducerAckConfig implements RabbitTemplate.ReturnCallback, RabbitTemplate.ConfirmCallback { + + // 我们发送消息使用的是 private RabbitTemplate rabbitTemplate; 对象 + // 如果不做设置的话 当前的rabbitTemplate 与当前的配置类没有任何关系! + @Autowired + private RabbitTemplate rabbitTemplate; + + // 设置 表示修饰一个非静态的void方法,在服务器加载Servlet的时候运行。并且只执行一次! + @PostConstruct + public void init() { + rabbitTemplate.setReturnCallback(this); + rabbitTemplate.setConfirmCallback(this); + } + + /** + * 表示消息是否正确发送到了交换机上 + * + * @param correlationData 消息的载体 + * @param ack 判断是否发送到交换机上 + * @param cause 原因 + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (ack) { + System.out.println("消息发送成功!"); + } else { + System.out.println("消息发送失败!" + cause); + } + } + + /** + * 消息如果没有正确发送到队列中,则会走这个方法!如果消息被正常处理,则这个方法不会走! + */ + @Override + public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { + System.out.println("消息主体: " + new String(message.getBody())); + System.out.println("应答码: " + replyCode); + System.out.println("描述:" + replyText); + System.out.println("消息使用的交换器 exchange : " + exchange); + System.out.println("消息使用的路由键 routing : " + routingKey); + } +} \ No newline at end of file diff --git a/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java b/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java index d621d31..4171472 100644 --- a/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java +++ b/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java @@ -28,4 +28,8 @@ public interface ProductFeignClient { // 根据关键字获取sku列表 @GetMapping("inner/findSkuInfoByKeyword/{keyword}") Result> findSkuInfoByKeyword(@PathVariable("keyword") String keyword); + + // 批量获取分类信息 + @PostMapping("inner/findCategoryList") + List findCategoryList(@RequestBody List rangeIdList); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/controller/CouponInfoController.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/controller/CouponInfoController.java index c0970a3..ca7595d 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/controller/CouponInfoController.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/controller/CouponInfoController.java @@ -1,21 +1,94 @@ package com.atguigu.ssyx.activity.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import com.atguigu.ssyx.activity.service.CouponInfoService; +import com.atguigu.ssyx.common.result.Result; +import com.atguigu.ssyx.model.activity.CouponInfo; +import com.atguigu.ssyx.vo.activity.CouponRuleVo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import java.util.List; +import java.util.Map; -/** - *

- * 优惠券信息 前端控制器 - *

- * - * @author bunny - * @since 2024-04-04 - */ +@Api(tags = "优惠卷相关接口") @RestController -@RequestMapping("/activity/coupon-info") +@RequestMapping("/admin/activity/couponInfo") public class CouponInfoController { -} + @Autowired + private CouponInfoService couponInfoService; + @ApiOperation(value = "获取分页列表") + @GetMapping("{page}/{limit}") + public Result> index( + @ApiParam(name = "page", value = "当前页码", required = true) + @PathVariable Long page, + @ApiParam(name = "limit", value = "每页记录数", required = true) + @PathVariable Long limit + ) { + Page pageParam = new Page<>(page, limit); + IPage pageModel = couponInfoService.selectPage(pageParam); + return Result.success(pageModel); + } + + @ApiOperation(value = "获取优惠券") + @GetMapping("get/{id}") + public Result get(@PathVariable Long id) { + CouponInfo couponInfo = couponInfoService.getCouponInfo(id); + return Result.success(couponInfo); + } + + @ApiOperation(value = "新增优惠券") + @PostMapping("save") + public Result save(@RequestBody CouponInfo couponInfo) { + couponInfoService.save(couponInfo); + return Result.success(); + } + + @ApiOperation(value = "修改优惠券") + @PutMapping("update") + public Result update(@RequestBody CouponInfo couponInfo) { + couponInfoService.save(couponInfo); + return Result.success(); + } + + @ApiOperation(value = "删除优惠券") + @DeleteMapping("remove/{id}") + public Result remove(@PathVariable Long id) { + couponInfoService.removeById(id); + return Result.success(); + } + + @ApiOperation(value = "根据id列表删除优惠券") + @DeleteMapping("batchRemove") + public Result batchRemove(@RequestBody List ids) { + couponInfoService.removeByIds(ids); + return Result.success(); + } + + @ApiOperation(value = "获取优惠券信息") + @GetMapping("findCouponRuleList/{id}") + public Result> findCouponRuleList(@PathVariable Long id) { + Map map = couponInfoService.findCouponRuleList(id); + return Result.success(map); + } + + @ApiOperation(value = "新增活动") + @PostMapping("saveCouponRule") + public Result saveCouponRule(@RequestBody CouponRuleVo couponRuleVo) { + couponInfoService.saveCouponRule(couponRuleVo); + return Result.success(); + } + + @ApiOperation(value = "根据关键字获取sku列表,活动使用") + @GetMapping("findCouponByKeyword/{keyword}") + public Result> findCouponByKeyword(@PathVariable("keyword") String keyword) { + return Result.success(couponInfoService.findCouponByKeyword(keyword)); + } +} \ No newline at end of file diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponRangeMapper.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponRangeMapper.java new file mode 100644 index 0000000..089c024 --- /dev/null +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponRangeMapper.java @@ -0,0 +1,9 @@ +package com.atguigu.ssyx.activity.mapper; + +import com.atguigu.ssyx.model.activity.CouponRange; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface CouponRangeMapper extends BaseMapper { +} diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java index 43bef9d..d9c4e80 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java @@ -1,8 +1,14 @@ package com.atguigu.ssyx.activity.service; import com.atguigu.ssyx.model.activity.CouponInfo; +import com.atguigu.ssyx.vo.activity.CouponRuleVo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; +import java.util.Map; + /** *

* 优惠券信息 服务类 @@ -13,4 +19,42 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface CouponInfoService extends IService { + /** + * * 获取分页列表 + * + * @param pageParam 查询分页条件 + * @return 分页结果 + */ + IPage selectPage(Page pageParam); + + /** + * 获取优惠券 + * + * @param id 优惠卷Id + * @return 优惠卷 + */ + CouponInfo getCouponInfo(Long id); + + /** + * 获取优惠券信息 + * + * @param id 优惠卷Id + * @return Map + */ + Map findCouponRuleList(Long id); + + /** + * * 新增活动 + * + * @param couponRuleVo 新的活动 + */ + void saveCouponRule(CouponRuleVo couponRuleVo); + + /** + * 根据关键字获取sku列表,活动使用 + * + * @param keyword 关键字 + * @return 根据关键字获取sku列表,活动使用 + */ + List findCouponByKeyword(String keyword); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java index b0a0ca5..961a880 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java @@ -1,20 +1,136 @@ package com.atguigu.ssyx.activity.service.impl; import com.atguigu.ssyx.activity.mapper.CouponInfoMapper; +import com.atguigu.ssyx.activity.mapper.CouponRangeMapper; import com.atguigu.ssyx.activity.service.CouponInfoService; +import com.atguigu.ssyx.client.product.ProductFeignClient; +import com.atguigu.ssyx.enums.CouponRangeType; import com.atguigu.ssyx.model.activity.CouponInfo; +import com.atguigu.ssyx.model.activity.CouponRange; +import com.atguigu.ssyx.model.product.Category; +import com.atguigu.ssyx.model.product.SkuInfo; +import com.atguigu.ssyx.vo.activity.CouponRuleVo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -/** - *

- * 优惠券信息 服务实现类 - *

- * - * @author bunny - * @since 2024-04-04 - */ +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service public class CouponInfoServiceImpl extends ServiceImpl implements CouponInfoService { + @Autowired + private CouponRangeMapper couponRangeMapper; + @Autowired + private ProductFeignClient productFeignClient; + /** + * * 获取分页列表 + * + * @param pageParam 查询分页条件 + * @return 分页结果 + */ + @Override + public IPage selectPage(Page pageParam) { + Page page = page(pageParam); + List pageRecords = page.getRecords(); + + pageRecords.forEach(record -> { + record.setCouponTypeString(record.getCouponType().getComment()); + CouponRangeType rangeType = record.getRangeType(); + if (rangeType != null) { + record.setRangeTypeString(rangeType.getComment()); + } + }); + return page; + } + + /** + * 获取优惠券 + * + * @param id 优惠卷Id + * @return 优惠卷 + */ + @Override + public CouponInfo getCouponInfo(Long id) { + CouponInfo couponInfo = getById(id); + couponInfo.setCouponTypeString(couponInfo.getCouponType().getComment()); + + // 使用范围 + if (couponInfo.getRangeType() != null) { + couponInfo.setRangeTypeString(couponInfo.getRangeType().getComment()); + } + return couponInfo; + } + + /** + * 获取优惠券信息 + * + * @param id 优惠卷Id + * @return Map + */ + @Override + public Map findCouponRuleList(Long id) { + Map result = new HashMap<>(); + CouponInfo couponInfo = getById(id); + // 根据Id查询 couponRange 列表 + List couponRangeList = couponRangeMapper.selectList(Wrappers.lambdaQuery().eq(CouponRange::getCouponId, id)); + List rangeIdList = couponRangeList.stream().map(CouponRange::getRangeId).collect(Collectors.toList()); + + // 分别判断封装不同数据 + if (!CollectionUtils.isEmpty(rangeIdList)) { + if (couponInfo.getRangeType() == CouponRangeType.SKU) { + List skuInfoList = productFeignClient.findSkuInfoList(rangeIdList).getData(); + result.put("skuInfoList", skuInfoList); + } + if (couponInfo.getRangeType() == CouponRangeType.CATEGORY) { + List categoryList = productFeignClient.findCategoryList(rangeIdList); + result.put("categoryList", categoryList); + } + } + + return result; + } + + /** + * * 新增活动 + * + * @param vo 新的活动 + */ + @Override + public void saveCouponRule(CouponRuleVo vo) { + // 删除之前的内容 + couponRangeMapper.delete(Wrappers.lambdaQuery().eq(CouponRange::getCouponId, vo.getCouponId())); + // 查询优惠卷基本信息 + CouponInfo couponInfo = getById(vo.getCouponId()); + couponInfo.setRangeType(vo.getRangeType()); + couponInfo.setConditionAmount(vo.getConditionAmount()); + couponInfo.setAmount(vo.getAmount()); + couponInfo.setConditionAmount(vo.getConditionAmount()); + couponInfo.setRangeDesc(vo.getRangeDesc()); + // 添加优惠卷信息 + updateById(couponInfo); + + // 添加优惠卷新的规则数据 + List couponRangeList = vo.getCouponRangeList(); + couponRangeList.forEach(couponRange -> { + couponRange.setCouponId(vo.getCouponId()); + couponRangeMapper.insert(couponRange); + }); + } + + @Override + public List findCouponByKeyword(String keyword) { + // 模糊查询 + QueryWrapper couponInfoQueryWrapper = new QueryWrapper<>(); + couponInfoQueryWrapper.like("coupon_name", keyword); + return list(couponInfoQueryWrapper); + } } diff --git a/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java b/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java index f33ce5c..b20ebb2 100644 --- a/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java +++ b/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java @@ -48,4 +48,10 @@ public class ProductInnerController { List skuInfoList = skuInfoService.findSkuInfoByKeyword(keyword); return Result.success(skuInfoList); } + + @ApiOperation(value = "批量获取分类信息") + @PostMapping("inner/findCategoryList") + public List findCategoryList(@RequestBody List rangeIdList) { + return categoryService.listByIds(rangeIdList); + } }