diff --git a/common/service-util/target/classes/com/atguigu/tingshu/common/config/redis/RedissonConfig.class b/common/service-util/target/classes/com/atguigu/tingshu/common/config/redis/RedissonConfig.class new file mode 100644 index 0000000..58edf85 Binary files /dev/null and b/common/service-util/target/classes/com/atguigu/tingshu/common/config/redis/RedissonConfig.class differ diff --git a/model/src/main/java/com/atguigu/tingshu/model/order/OrderInfo.java b/model/src/main/java/com/atguigu/tingshu/model/order/OrderInfo.java index 45b406a..5883f87 100644 --- a/model/src/main/java/com/atguigu/tingshu/model/order/OrderInfo.java +++ b/model/src/main/java/com/atguigu/tingshu/model/order/OrderInfo.java @@ -61,9 +61,33 @@ public class OrderInfo extends BaseEntity { @TableField(exist = false) private List orderDerateList; - @TableField(exist = false) - private String orderStatusName; - @TableField(exist = false) - private String payWayName; + +// @TableField(exist = false) +// private String orderStatusName; +// @TableField(exist = false) +// private String payWayName; + + //更改这个实体类 我们转json的任何框架都是通过获取get方法去改的 + //将get去掉获取属性名称 将get方法返回值作为属性值 + public String getOrderStatusName() { + if("0901".equals(orderStatus)){ + return "未支付"; + } else if ("0902".equals(orderStatus)) { + return "已支付"; + } else if ("0903".equals(orderStatus)) { + return "已取消"; + } + return null; + } + public String getPayWayName() { + if ("1101".equals(payWay)) { + return "微信"; + } else if ("1102".equals(payWay)) { + return "支付宝"; + } else if ("1103".equals(payWay)) { + return "余额"; + } + return ""; + } } \ No newline at end of file diff --git a/model/target/classes/com/atguigu/tingshu/model/order/OrderInfo.class b/model/target/classes/com/atguigu/tingshu/model/order/OrderInfo.class index 1b1df33..0d5b6a6 100644 Binary files a/model/target/classes/com/atguigu/tingshu/model/order/OrderInfo.class and b/model/target/classes/com/atguigu/tingshu/model/order/OrderInfo.class differ diff --git a/model/target/classes/com/atguigu/tingshu/vo/order/TradeVo.class b/model/target/classes/com/atguigu/tingshu/vo/order/TradeVo.class index f3c8111..1c65930 100644 Binary files a/model/target/classes/com/atguigu/tingshu/vo/order/TradeVo.class and b/model/target/classes/com/atguigu/tingshu/vo/order/TradeVo.class differ diff --git a/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/AccountFeignClient.java b/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/AccountFeignClient.java index 94ee3e3..31c7deb 100644 --- a/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/AccountFeignClient.java +++ b/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/AccountFeignClient.java @@ -2,8 +2,11 @@ package com.atguigu.tingshu.account; import com.atguigu.tingshu.account.impl.AccountDegradeFeignClient; import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.account.RechargeInfo; import com.atguigu.tingshu.vo.account.AccountDeductVo; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -24,4 +27,7 @@ public interface AccountFeignClient { @PostMapping("/userAccount/checkAndDeduct") public Result checkAndDeduct(@RequestBody AccountDeductVo accountDeductVo); + @GetMapping("/rechargeInfo/getRechargeInfo/{orderNo}") + public Result getRechargeInfo(@PathVariable String orderNo); + } diff --git a/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.java b/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.java index 13e5d93..8d8e5fa 100644 --- a/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.java +++ b/service-client/service-account-client/src/main/java/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.java @@ -3,6 +3,7 @@ package com.atguigu.tingshu.account.impl; import com.atguigu.tingshu.account.AccountFeignClient; import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.account.RechargeInfo; import com.atguigu.tingshu.vo.account.AccountDeductVo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -16,4 +17,10 @@ public class AccountDegradeFeignClient implements AccountFeignClient { log.error("[账户服务]checkAndDeduct服务调用失败"); return null; } + + @Override + public Result getRechargeInfo(String orderNo) { + log.error("[账户服务]getRechargeInfo服务调用失败"); + return null; + } } diff --git a/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/AccountFeignClient.class b/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/AccountFeignClient.class index 73b23f2..fa3ef6f 100644 Binary files a/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/AccountFeignClient.class and b/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/AccountFeignClient.class differ diff --git a/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.class b/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.class index a6bf8ae..f811a71 100644 Binary files a/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.class and b/service-client/service-account-client/target/classes/com/atguigu/tingshu/account/impl/AccountDegradeFeignClient.class differ diff --git a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java index 16ebc29..b804b64 100644 --- a/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java +++ b/service-client/service-album-client/src/main/java/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.java @@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.List; -import java.util.Map; @Component @Slf4j diff --git a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class index 8d1eff6..d0946f7 100644 Binary files a/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class and b/service-client/service-album-client/target/classes/com/atguigu/tingshu/album/impl/AlbumDegradeFeignClient.class differ diff --git a/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/OrderFeignClient.java b/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/OrderFeignClient.java index 9fa7ea4..976a4e6 100644 --- a/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/OrderFeignClient.java +++ b/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/OrderFeignClient.java @@ -1,7 +1,11 @@ package com.atguigu.tingshu.order.client; +import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.order.OrderInfo; import com.atguigu.tingshu.order.client.impl.OrderDegradeFeignClient; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; /** *

@@ -10,8 +14,10 @@ import org.springframework.cloud.openfeign.FeignClient; * * @author atguigu */ -@FeignClient(value = "service-order", fallback = OrderDegradeFeignClient.class) +@FeignClient(value = "service-order",path = "api/order", fallback = OrderDegradeFeignClient.class) public interface OrderFeignClient { + @GetMapping("/orderInfo/getOrderInfo/{orderNo}") + public Result getOrderInfo(@PathVariable String orderNo); } diff --git a/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.java b/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.java index 7025aa2..e45c7e2 100644 --- a/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.java +++ b/service-client/service-order-client/src/main/java/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.java @@ -1,10 +1,19 @@ package com.atguigu.tingshu.order.client.impl; +import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.order.OrderInfo; import com.atguigu.tingshu.order.client.OrderFeignClient; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +@Slf4j @Component public class OrderDegradeFeignClient implements OrderFeignClient { + @Override + public Result getOrderInfo(String orderNo) { + log.error("[订单服务]提供远程调用方法getOrderInfo执行服务降级"); + return null; + } } diff --git a/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/OrderFeignClient.class b/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/OrderFeignClient.class index 9093347..f4c8102 100644 Binary files a/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/OrderFeignClient.class and b/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/OrderFeignClient.class differ diff --git a/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.class b/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.class index f707416..efaaaed 100644 Binary files a/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.class and b/service-client/service-order-client/target/classes/com/atguigu/tingshu/order/client/impl/OrderDegradeFeignClient.class differ diff --git a/service/service-account/src/main/java/com/atguigu/tingshu/account/api/RechargeInfoApiController.java b/service/service-account/src/main/java/com/atguigu/tingshu/account/api/RechargeInfoApiController.java index 228bb98..c5d28a7 100644 --- a/service/service-account/src/main/java/com/atguigu/tingshu/account/api/RechargeInfoApiController.java +++ b/service/service-account/src/main/java/com/atguigu/tingshu/account/api/RechargeInfoApiController.java @@ -1,8 +1,14 @@ package com.atguigu.tingshu.account.api; import com.atguigu.tingshu.account.service.RechargeInfoService; +import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.account.RechargeInfo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,5 +21,21 @@ public class RechargeInfoApiController { @Autowired private RechargeInfoService rechargeInfoService; + + /** + * 根据充值订单编号查询充值信息 + * @param orderNo + * @return + */ + @Operation(summary = "根据订单编号查询充值信息") + @GetMapping("/rechargeInfo/getRechargeInfo/{orderNo}") + public Result getRechargeInfo(@PathVariable String orderNo){ + RechargeInfo rechargeInfo = rechargeInfoService.getOne( + new LambdaQueryWrapper() + .eq(RechargeInfo::getOrderNo, orderNo) + ); + return Result.ok(rechargeInfo); + } + } diff --git a/service/service-account/target/classes/com/atguigu/tingshu/account/api/RechargeInfoApiController.class b/service/service-account/target/classes/com/atguigu/tingshu/account/api/RechargeInfoApiController.class index 098e309..d906e9a 100644 Binary files a/service/service-account/target/classes/com/atguigu/tingshu/account/api/RechargeInfoApiController.class and b/service/service-account/target/classes/com/atguigu/tingshu/account/api/RechargeInfoApiController.class differ diff --git a/service/service-album/target/classes/com/atguigu/tingshu/album/task/RebuildBloomFilterTask.class b/service/service-album/target/classes/com/atguigu/tingshu/album/task/RebuildBloomFilterTask.class new file mode 100644 index 0000000..b0fbf56 Binary files /dev/null and b/service/service-album/target/classes/com/atguigu/tingshu/album/task/RebuildBloomFilterTask.class differ diff --git a/service/service-cdc/target/classes/bootstrap.properties b/service/service-cdc/target/classes/bootstrap.properties new file mode 100644 index 0000000..88efb3c --- /dev/null +++ b/service/service-cdc/target/classes/bootstrap.properties @@ -0,0 +1,8 @@ +spring.application.name=service-canal +spring.profiles.active=dev +spring.main.allow-bean-definiton-overriding=true +spring.cloud.nacos.discovery.server-addr=192.168.200.6:8848 +spring.cloud.nacos.config.server-addr=192.168.200.6:8848 +spring.cloud.nacos.config.prefix=${spring.application.name} +spring.cloud.nacos.config.file-extension=yaml +spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml diff --git a/service/service-cdc/target/classes/com/atguigu/tingshu/CDCApplicaiton.class b/service/service-cdc/target/classes/com/atguigu/tingshu/CDCApplicaiton.class new file mode 100644 index 0000000..95b411c Binary files /dev/null and b/service/service-cdc/target/classes/com/atguigu/tingshu/CDCApplicaiton.class differ diff --git a/service/service-cdc/target/classes/com/atguigu/tingshu/listener/AlbumListener.class b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/AlbumListener.class new file mode 100644 index 0000000..5f2fbef Binary files /dev/null and b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/AlbumListener.class differ diff --git a/service/service-cdc/target/classes/com/atguigu/tingshu/listener/UserListener.class b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/UserListener.class new file mode 100644 index 0000000..8467674 Binary files /dev/null and b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/UserListener.class differ diff --git a/service/service-cdc/target/classes/com/atguigu/tingshu/listener/VipServiceConfigListener.class b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/VipServiceConfigListener.class new file mode 100644 index 0000000..42897f7 Binary files /dev/null and b/service/service-cdc/target/classes/com/atguigu/tingshu/listener/VipServiceConfigListener.class differ diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/api/OrderInfoApiController.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/api/OrderInfoApiController.java index ec8d13f..e364b9a 100644 --- a/service/service-order/src/main/java/com/atguigu/tingshu/order/api/OrderInfoApiController.java +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/api/OrderInfoApiController.java @@ -3,16 +3,15 @@ package com.atguigu.tingshu.order.api; import com.atguigu.tingshu.common.login.GuiGuLogin; import com.atguigu.tingshu.common.result.Result; import com.atguigu.tingshu.common.util.AuthContextHolder; +import com.atguigu.tingshu.model.order.OrderInfo; import com.atguigu.tingshu.order.service.OrderInfoService; import com.atguigu.tingshu.vo.order.OrderInfoVo; import com.atguigu.tingshu.vo.order.TradeVo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -48,6 +47,32 @@ public class OrderInfoApiController { return Result.ok(result); } + /** + * 查询订单及订单明细+优惠列表 + * + * @param orderNo + * @return + */ + @Operation(summary = "查询订单及订单明细+优惠列表") + @GetMapping("/orderInfo/getOrderInfo/{orderNo}") + public Result getOrderInfo(@PathVariable String orderNo) { + OrderInfo orderInfo = orderInfoService.getOrderInfo(orderNo); + return Result.ok(orderInfo); + } + + @GuiGuLogin + @Operation(summary = "分页获取当前用户订单列表") + @GetMapping("/orderInfo/findUserPage/{page}/{limit}") + public Result> findUserOrderPage(@PathVariable Long page, @PathVariable Long limit){ + Page pageInfo =new Page<>(page,limit); + Long userId = AuthContextHolder.getUserId(); + Page pageModel =orderInfoService.findUserOrderPage(pageInfo,userId); + return Result.ok(pageModel); + + } + + + } diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/config/CanelOrderMqConfig.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/config/CanelOrderMqConfig.java new file mode 100644 index 0000000..750947d --- /dev/null +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/config/CanelOrderMqConfig.java @@ -0,0 +1,35 @@ +package com.atguigu.tingshu.order.config; + +import com.atguigu.tingshu.common.rabbit.constant.MqConst; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.CustomExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class CanelOrderMqConfig { + + @Bean + public Queue cancelQueue() { + // 第一个参数是创建的queue的名字,第二个参数是是否支持持久化 + return new Queue(MqConst.QUEUE_CANCEL_ORDER, true); + } + + @Bean + public CustomExchange cancelExchange() { + Map args = new HashMap(); + args.put("x-delayed-type", "direct"); + return new CustomExchange(MqConst.EXCHANGE_CANCEL_ORDER, "x-delayed-message", true, false, args); + } + + @Bean + public Binding bindingCancel() { + return BindingBuilder.bind(cancelQueue()).to(cancelExchange()).with(MqConst.ROUTING_CANCEL_ORDER).noargs(); + } + +} diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/receiver/OrderReceiver.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/receiver/OrderReceiver.java new file mode 100644 index 0000000..2c08c3a --- /dev/null +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/receiver/OrderReceiver.java @@ -0,0 +1,41 @@ +package com.atguigu.tingshu.order.receiver; + +import com.atguigu.tingshu.common.rabbit.constant.MqConst; +import com.atguigu.tingshu.order.service.OrderInfoService; +import com.rabbitmq.client.Channel; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author: atguigu + * @create: 2025-08-05 14:03 + */ +@Slf4j +@Component +public class OrderReceiver { + + + @Autowired + private OrderInfoService orderInfoService; + + /** + * 延迟关单监听器 + * + * @param orderId + */ + @SneakyThrows + @RabbitListener(queues = MqConst.QUEUE_CANCEL_ORDER) + public void cancelOrder(Long orderId, Channel channel, Message message) { + if (orderId != null) { + log.info("[订单服务]监听到延迟关单消息:{}", orderId); + orderInfoService.cancelOrder(orderId); + } + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } + + +} diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/AccountPayBizService.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/AccountPayBizService.java new file mode 100644 index 0000000..99de26f --- /dev/null +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/AccountPayBizService.java @@ -0,0 +1,11 @@ +package com.atguigu.tingshu.order.service; + +import com.atguigu.tingshu.model.order.OrderInfo; + +public interface AccountPayBizService { + /** + * 处理账户支付业务逻辑 + * @param orderInfo + */ + public void handlerAccountPay(OrderInfo orderInfo); +} diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/OrderInfoService.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/OrderInfoService.java index 1c6923c..c050094 100644 --- a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/OrderInfoService.java +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/OrderInfoService.java @@ -3,6 +3,7 @@ package com.atguigu.tingshu.order.service; import com.atguigu.tingshu.model.order.OrderInfo; import com.atguigu.tingshu.vo.order.OrderInfoVo; import com.atguigu.tingshu.vo.order.TradeVo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.Map; @@ -15,4 +16,11 @@ public interface OrderInfoService extends IService { Map submitOrder(OrderInfoVo orderInfoVo, Long userId); OrderInfo saveOrderInfo(OrderInfoVo orderInfoVo, Long userId); + + OrderInfo getOrderInfo(String orderNo); + + Page findUserOrderPage(Page pageInfo, Long userId); + + void cancelOrder(Long orderId); + } diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.java new file mode 100644 index 0000000..d0784c7 --- /dev/null +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.java @@ -0,0 +1,81 @@ +package com.atguigu.tingshu.order.service.impl; + +import com.atguigu.tingshu.account.AccountFeignClient; +import com.atguigu.tingshu.common.constant.SystemConstant; +import com.atguigu.tingshu.common.execption.GuiguException; +import com.atguigu.tingshu.common.result.Result; +import com.atguigu.tingshu.model.order.OrderDetail; +import com.atguigu.tingshu.model.order.OrderInfo; +import com.atguigu.tingshu.order.mapper.OrderInfoMapper; +import com.atguigu.tingshu.order.service.AccountPayBizService; +import com.atguigu.tingshu.order.service.OrderDetailService; +import com.atguigu.tingshu.user.client.UserFeignClient; +import com.atguigu.tingshu.vo.account.AccountDeductVo; +import com.atguigu.tingshu.vo.user.UserPaidRecordVo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.seata.spring.annotation.GlobalTransactional; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class AccountPayBizServiceImpl implements AccountPayBizService { + @Autowired + private AccountFeignClient accountFeignClient; + @Autowired + private OrderInfoMapper orderInfoMapper; + @Autowired + private OrderDetailService orderDetailService; + @Autowired + private UserFeignClient userFeignClient; + + + + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public void handlerAccountPay(OrderInfo orderInfo) { + //余额扣减 + //4.1 远程调用账户服务扣减账户余额 + AccountDeductVo accountDeductVo = new AccountDeductVo(); + accountDeductVo.setAmount(orderInfo.getOrderAmount()); + accountDeductVo.setOrderNo(orderInfo.getOrderNo()); + accountDeductVo.setContent(orderInfo.getOrderTitle()); + accountDeductVo.setUserId(orderInfo.getUserId()); + + + Result result = accountFeignClient.checkAndDeduct(accountDeductVo); + //判断是否为扣减成功 + if (result.getCode().intValue() != 200) { + throw new GuiguException(result.getCode(), result.getMessage()); + } + //4.2 如果扣减余额成功,修改订单状态改为:已支付 + orderInfo.setOrderStatus(SystemConstant.ORDER_STATUS_PAID); + orderInfoMapper.updateById(orderInfo); + + //4.3 远程调用用户服务虚拟物品发货 + //4.3.1 构建虚拟发货VO对象 + UserPaidRecordVo userPaidRecordVo = new UserPaidRecordVo(); + userPaidRecordVo.setOrderNo(orderInfo.getOrderNo()); + userPaidRecordVo.setUserId(orderInfo.getUserId()); + userPaidRecordVo.setItemType(orderInfo.getItemType()); + //根据订单编号查询订单明细获取购买项目ID列表 + List orderDetailList = orderDetailService.list( + new LambdaQueryWrapper() + .eq(OrderDetail::getOrderId, orderInfo.getId()) + .select(OrderDetail::getItemId) + ); + List itemIdList = orderDetailList.stream() + .map(OrderDetail::getItemId).collect(Collectors.toList()); + userPaidRecordVo.setItemIdList(itemIdList); + //4.3.2 远程调用用户服务,发放用户权益 + result = userFeignClient.savePaidRecord(userPaidRecordVo); + //4.3.3 判断远程调用结果业务状态码是否为200 + if (result.getCode().intValue() != 200) { + throw new GuiguException(result.getCode(), result.getMessage()); + } + } +} diff --git a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.java b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.java index 1e8af2a..6deff01 100644 --- a/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.java +++ b/service/service-order/src/main/java/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.java @@ -3,25 +3,23 @@ package com.atguigu.tingshu.order.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import com.atguigu.tingshu.account.AccountFeignClient; import com.atguigu.tingshu.album.AlbumFeignClient; import com.atguigu.tingshu.common.constant.RedisConstant; import com.atguigu.tingshu.common.constant.SystemConstant; import com.atguigu.tingshu.common.execption.GuiguException; +import com.atguigu.tingshu.common.rabbit.constant.MqConst; +import com.atguigu.tingshu.common.rabbit.service.RabbitService; import com.atguigu.tingshu.common.result.Result; -import com.atguigu.tingshu.common.util.AuthContextHolder; -import com.atguigu.tingshu.model.album.AlbumInfo; -import com.atguigu.tingshu.model.album.TrackInfo; import com.atguigu.tingshu.model.order.OrderDerate; import com.atguigu.tingshu.model.order.OrderDetail; import com.atguigu.tingshu.model.order.OrderInfo; -import com.atguigu.tingshu.model.user.VipServiceConfig; import com.atguigu.tingshu.order.helper.SignHelper; import com.atguigu.tingshu.order.mapper.OrderInfoMapper; import com.atguigu.tingshu.order.pattern.TradeTypeStrategy; import com.atguigu.tingshu.order.pattern.factory.TradeTypeStrategyFactory; +import com.atguigu.tingshu.order.service.AccountPayBizService; import com.atguigu.tingshu.order.service.OrderDerateService; import com.atguigu.tingshu.order.service.OrderDetailService; import com.atguigu.tingshu.order.service.OrderInfoService; @@ -31,21 +29,20 @@ import com.atguigu.tingshu.vo.order.OrderDerateVo; import com.atguigu.tingshu.vo.order.OrderDetailVo; import com.atguigu.tingshu.vo.order.OrderInfoVo; import com.atguigu.tingshu.vo.order.TradeVo; -import com.atguigu.tingshu.vo.user.UserInfoVo; import com.atguigu.tingshu.vo.user.UserPaidRecordVo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Service; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j @@ -69,6 +66,12 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetailList = orderDetailService.list( - new LambdaQueryWrapper() - .eq(OrderDetail::getOrderId, orderInfo.getId()) - .select(OrderDetail::getItemId) - ); - List itemIdList = orderDetailList.stream() - .map(OrderDetail::getItemId).collect(Collectors.toList()); - userPaidRecordVo.setItemIdList(itemIdList); - //4.3.2 远程调用用户服务,发放用户权益 - result = userFeignClient.savePaidRecord(userPaidRecordVo); - //4.3.3 判断远程调用结果业务状态码是否为200 - if (result.getCode().intValue() != 200) { - throw new GuiguException(result.getCode(), result.getMessage()); - } - + //4. 判断支付方式:余额扣减核心业务 + if (SystemConstant.ORDER_PAY_ACCOUNT.equals(payWay)) { + //进行提取 其他两个功能用分布式事务@GlobalTransactional去修饰 + accountPayBizService.handlerAccountPay(orderInfo); } //5.TODO 判断支付方式:微信 - //else if(SystemConstant.ORDER_PAY_WAY_WEIXIN.equals(payWay)){ + if(SystemConstant.ORDER_PAY_WAY_WEIXIN.equals(payWay)){ + //发送一个延时关闭的延时插件 + rabbitService.sendDealyMessage(MqConst.EXCHANGE_CANCEL_ORDER, + MqConst.ROUTING_CANCEL_ORDER, orderInfo.getId(), ttl); - //} + } //6.响应结果 return Map.of("orderNo", orderInfo.getOrderNo()); - } @Override @@ -215,4 +182,73 @@ public class OrderInfoServiceImpl extends ServiceImpl() + .eq(OrderInfo::getOrderNo, orderNo) + ); + Long orderInfoId = orderInfo.getId(); + + //2.根据订单ID查询订单明细 + List list = orderDetailService.list( + new LambdaQueryWrapper() + .eq(OrderDetail::getOrderId, orderInfoId) + ); + orderInfo.setOrderDetailList(list); + //3.根据订单ID查询订单减免列表 + List orderDerateList = orderDerateService.list( + new LambdaQueryWrapper() + .eq(OrderDerate::getOrderId, orderInfoId) + ); + orderInfo.setOrderDerateList(orderDerateList); + return orderInfo; + } + + @Override + public Page findUserOrderPage(Page pageInfo, Long userId) { + //2.TODO 方式二:单独分页查询订单,在根据订单ID集合查询订单明细,封装订单明细列表 + //先查出来订单的分页对象 + Page orderInfoPage = orderInfoMapper.selectPage(pageInfo, + new LambdaQueryWrapper() + .eq(OrderInfo::getId, userId) + .select(OrderInfo::getId, OrderInfo::getOrderNo, OrderInfo::getOrderStatus, + OrderInfo::getPayWay, OrderInfo::getOriginalAmount, OrderInfo::getOrderAmount, + OrderInfo::getDerateAmount) + .orderByDesc(OrderInfo::getId)); + + //根据分页对象查出订单的id,将其变成一个list + List orderIdList = orderInfoPage.getRecords().stream().map(OrderInfo::getId).collect(Collectors.toList()); + //4.查询所有订单明细列表 + List orderDetailList = orderDetailService.list( + new LambdaQueryWrapper() + .in(OrderDetail::getOrderId, orderIdList) + .select(OrderDetail::getOrderId, OrderDetail::getItemId, OrderDetail::getItemName, + OrderDetail::getItemPrice, OrderDetail::getItemUrl) + ); + //将所有订单明细表作为value存入一个map中,key为订单的id + Map> orderDetailListMap = orderDetailList.stream().collect(Collectors.groupingBy(OrderDetail::getOrderId)); + //遍历 将其都改成订单的明细列表 + for (OrderInfo record : orderInfoPage.getRecords()) { + record.setOrderDetailList(orderDetailListMap.get(record.getId())); + } + return orderInfoPage; + + } + + //关单 如果长时间没有支付的话我们就将订单的状态由未支付改为已取消 + @Override + public void cancelOrder(Long orderId) { + OrderInfo orderInfo = orderInfoMapper.selectById(orderId); + String orderStatus = orderInfo.getOrderStatus(); + if(SystemConstant.ORDER_STATUS_UNPAID.equals(orderStatus)){ + orderInfo.setOrderStatus(SystemConstant.ORDER_STATUS_CANCEL); + orderInfoMapper.updateById(orderInfo); + //TODO 关闭第三方支付平台(微信支付)支付订单 + + } + + } + } diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/api/OrderInfoApiController.class b/service/service-order/target/classes/com/atguigu/tingshu/order/api/OrderInfoApiController.class index da6d1fe..25f2757 100644 Binary files a/service/service-order/target/classes/com/atguigu/tingshu/order/api/OrderInfoApiController.class and b/service/service-order/target/classes/com/atguigu/tingshu/order/api/OrderInfoApiController.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/config/CanelOrderMqConfig.class b/service/service-order/target/classes/com/atguigu/tingshu/order/config/CanelOrderMqConfig.class new file mode 100644 index 0000000..ebfa4f8 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/config/CanelOrderMqConfig.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/TradeTypeStrategy.class b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/TradeTypeStrategy.class new file mode 100644 index 0000000..befe371 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/TradeTypeStrategy.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/factory/TradeTypeStrategyFactory.class b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/factory/TradeTypeStrategyFactory.class new file mode 100644 index 0000000..18a2507 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/factory/TradeTypeStrategyFactory.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/AlbumTradeType.class b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/AlbumTradeType.class new file mode 100644 index 0000000..57214e4 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/AlbumTradeType.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/TrackTradeType.class b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/TrackTradeType.class new file mode 100644 index 0000000..547ab37 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/TrackTradeType.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/VIPTradeType.class b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/VIPTradeType.class new file mode 100644 index 0000000..921092e Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/pattern/impl/VIPTradeType.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/receiver/OrderReceiver.class b/service/service-order/target/classes/com/atguigu/tingshu/order/receiver/OrderReceiver.class new file mode 100644 index 0000000..ccb59fa Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/receiver/OrderReceiver.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/AccountPayBizService.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/AccountPayBizService.class new file mode 100644 index 0000000..edaafc6 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/AccountPayBizService.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDerateService.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDerateService.class new file mode 100644 index 0000000..52d15ea Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDerateService.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDetailService.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDetailService.class new file mode 100644 index 0000000..b194a40 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderDetailService.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderInfoService.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderInfoService.class index c02e15a..a4292cc 100644 Binary files a/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderInfoService.class and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/OrderInfoService.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.class new file mode 100644 index 0000000..e386d0f Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/AccountPayBizServiceImpl.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDerateServiceImpl.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDerateServiceImpl.class new file mode 100644 index 0000000..722b8c4 Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDerateServiceImpl.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDetailServiceImpl.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDetailServiceImpl.class new file mode 100644 index 0000000..5460e0e Binary files /dev/null and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderDetailServiceImpl.class differ diff --git a/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.class b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.class index d15be6b..04f99b0 100644 Binary files a/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.class and b/service/service-order/target/classes/com/atguigu/tingshu/order/service/impl/OrderInfoServiceImpl.class differ diff --git a/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/PaymentInfoService.java b/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/PaymentInfoService.java index 1fe37a2..68a126c 100644 --- a/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/PaymentInfoService.java +++ b/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/PaymentInfoService.java @@ -4,5 +4,13 @@ import com.atguigu.tingshu.model.payment.PaymentInfo; import com.baomidou.mybatisplus.extension.service.IService; public interface PaymentInfoService extends IService { + /** + * 保存本地交易记录 + * + * @param paymentType:支付类型 1301-订单 1302-充值 + * @param orderNo: 订单编号 + * @return + */ + public PaymentInfo savePaymentInfo(String paymentType, String orderNo); } diff --git a/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.java b/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.java index 50ffb3a..229b0cb 100644 --- a/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.java +++ b/service/service-payment/src/main/java/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.java @@ -1,13 +1,84 @@ package com.atguigu.tingshu.payment.service.impl; +import com.atguigu.tingshu.account.AccountFeignClient; +import com.atguigu.tingshu.common.constant.SystemConstant; +import com.atguigu.tingshu.model.account.RechargeInfo; +import com.atguigu.tingshu.model.order.OrderInfo; import com.atguigu.tingshu.model.payment.PaymentInfo; +import com.atguigu.tingshu.order.client.OrderFeignClient; import com.atguigu.tingshu.payment.mapper.PaymentInfoMapper; import com.atguigu.tingshu.payment.service.PaymentInfoService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -@SuppressWarnings({"all"}) +@SuppressWarnings("all") public class PaymentInfoServiceImpl extends ServiceImpl implements PaymentInfoService { + @Autowired + private OrderFeignClient orderFeignClient; + @Autowired + private AccountFeignClient accountFeignClient; + @Autowired + private PaymentInfoMapper paymentInfoMapper; + //保存本地的用户信息 + @Override + public PaymentInfo savePaymentInfo(String paymentType, String orderNo) { + //根据订单id去获取订单的支付信息 + PaymentInfo paymentInfo = paymentInfoMapper.selectOne( + new LambdaQueryWrapper() + .eq(PaymentInfo::getOrderNo, orderNo) + ); + if (paymentInfo != null) { + return paymentInfo; + } + //2.如果不存在,则构建本地交易记录对象 + paymentInfo = new PaymentInfo(); + //2.1 交易状态:1401-未支付 1402-已支付 + paymentInfo.setPaymentStatus(SystemConstant.PAYMENT_STATUS_UNPAID); + //2.2 交易编号(微信或支付) + paymentInfo.setPayWay(SystemConstant.ORDER_PAY_WAY_WEIXIN); + //2.3 支付类型:1301-订单 1302-充值 + paymentInfo.setPaymentType(paymentType); + //2.4 订单编号 + paymentInfo.setOrderNo(orderNo); + //处理支付类型为 订单 + if (SystemConstant.PAYMENT_TYPE_ORDER.equals(paymentType)){ + //远程调用订单服务获取订单信息,封装用户ID,交易金额,交易内容 + OrderInfo orderInfo = orderFeignClient.getOrderInfo(orderNo).getData(); + String orderStatus = orderInfo.getOrderStatus(); + if (!SystemConstant.ORDER_STATUS_UNPAID.equals(orderStatus)) { + throw new RuntimeException("订单状态有误!"); + } + //2.5 用户ID + paymentInfo.setUserId(orderInfo.getUserId()); + //2.6 交易金额 + paymentInfo.setAmount(orderInfo.getOrderAmount()); + //2.7 交易内容 + paymentInfo.setContent(orderInfo.getOrderTitle()); + + } + //处理支付类型为充值 + if (SystemConstant.PAYMENT_TYPE_RECHARGE.equals(paymentType)) { + //远程调用账户服务获取充值信息,封装用户ID,交易金额,交易内容 + RechargeInfo rechargeInfo = accountFeignClient.getRechargeInfo(orderNo).getData(); + String rechargeStatus = rechargeInfo.getRechargeStatus(); + if (!SystemConstant.ORDER_STATUS_UNPAID.equals(rechargeStatus)) { + throw new RuntimeException("充值状态有误!"); + } + //2.5 用户ID + paymentInfo.setUserId(rechargeInfo.getUserId()); + //2.6 交易金额 + paymentInfo.setAmount(rechargeInfo.getRechargeAmount()); + //2.7 交易内容 + paymentInfo.setContent("充值:" + rechargeInfo.getRechargeAmount()); + } + paymentInfoMapper.insert(paymentInfo); + return paymentInfo; + + + + } } diff --git a/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/PaymentInfoService.class b/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/PaymentInfoService.class index 46d7ef8..ecdf615 100644 Binary files a/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/PaymentInfoService.class and b/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/PaymentInfoService.class differ diff --git a/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.class b/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.class index e1c4e79..1ca06f5 100644 Binary files a/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.class and b/service/service-payment/target/classes/com/atguigu/tingshu/payment/service/impl/PaymentInfoServiceImpl.class differ diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/DeliveryStrategy.class b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/DeliveryStrategy.class new file mode 100644 index 0000000..286dcd9 Binary files /dev/null and b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/DeliveryStrategy.class differ diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/factory/DeliveryStrategyFactory.class b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/factory/DeliveryStrategyFactory.class new file mode 100644 index 0000000..3c5f4f3 Binary files /dev/null and b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/factory/DeliveryStrategyFactory.class differ diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/AlbumDelivery.class b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/AlbumDelivery.class new file mode 100644 index 0000000..317cdca Binary files /dev/null and b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/AlbumDelivery.class differ diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/TrackDelivery.class b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/TrackDelivery.class new file mode 100644 index 0000000..f1ea733 Binary files /dev/null and b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/TrackDelivery.class differ diff --git a/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/VIPDelivery.class b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/VIPDelivery.class new file mode 100644 index 0000000..622fd3d Binary files /dev/null and b/service/service-user/target/classes/com/atguigu/tingshu/user/pattern/impl/VIPDelivery.class differ