it_lv 3 weeks ago
parent
commit
401ac4ff7e
2 changed files with 76 additions and 178 deletions
  1. 47 108
      第8章 支付.md
  2. 29 70
      第9章 分布式任务调度.md

+ 47 - 108
第8章 支付.md

@@ -1107,15 +1107,16 @@ public Map<String, String> submitRecharge(RechargeInfoVo rechargeInfoVo) {
 
 ```java
 /**
- * 用户微信支付成功后,完成充值核心业务
+ * 用户付款后处理充值成功业务
+ *
  * @param orderNo
  * @return
  */
-@Operation(summary = "用户微信支付成功后,完成充值核心业务")
+@Operation(summary = "用户付款后处理充值成功业务")
 @GetMapping("/rechargeInfo/rechargePaySuccess/{orderNo}")
-public Result rechargePaySuccess(@PathVariable String orderNo){
-	rechargeInfoService.rechargePaySuccess(orderNo);
-	return Result.ok();
+public Result rechargePaySuccess(@PathVariable String orderNo) {
+    rechargeInfoService.rechargePaySuccess(orderNo);
+    return Result.ok();
 }
 ```
 
@@ -1123,9 +1124,9 @@ public Result rechargePaySuccess(@PathVariable String orderNo){
 
 ```java
 /**
- * 用户微信支付成功后,完成充值核心业务
+ * 用户付款后处理充值成功业务
+ *
  * @param orderNo
- * @return
  */
 void rechargePaySuccess(String orderNo);
 ```
@@ -1136,69 +1137,39 @@ void rechargePaySuccess(String orderNo);
 @Autowired
 private UserAccountService userAccountService;
 
+
 /**
- * 用户微信支付成功后,完成充值核心业务
+ * 用户付款后处理充值成功业务
  *
- * @param orderNo 充值订单编号
- * @return
+ * @param orderNo
  */
 @Override
 public void rechargePaySuccess(String orderNo) {
-    //1.根据订单编号查询充值记录 更新充值记录状态
+    //1.修改充值状态
+    //1.1. 根据充值订单编号查询充值记录
     LambdaQueryWrapper<RechargeInfo> queryWrapper = new LambdaQueryWrapper<>();
     queryWrapper.eq(RechargeInfo::getOrderNo, orderNo);
     RechargeInfo rechargeInfo = rechargeInfoMapper.selectOne(queryWrapper);
+
     if (SystemConstant.ORDER_STATUS_UNPAID.equals(rechargeInfo.getRechargeStatus())) {
+        //1.2 修改充值状态:已支付
         rechargeInfo.setRechargeStatus(SystemConstant.ORDER_STATUS_PAID);
         rechargeInfoMapper.updateById(rechargeInfo);
+
         //2.余额充值
-        userAccountService.recharge(rechargeInfo.getUserId(), rechargeInfo.getRechargeAmount());
+        LambdaUpdateWrapper<UserAccount> updateWrapper = new LambdaUpdateWrapper<>();
+        BigDecimal amount = rechargeInfo.getRechargeAmount();
+        updateWrapper.setSql("total_amount = total_amount + " + amount + ", available_amount = available_amount + " + amount + ", total_income_amount = total_income_amount + " + amount);
+        updateWrapper.eq(UserAccount::getUserId, rechargeInfo.getUserId());
+        userAccountService.update(updateWrapper);
+
         //3.新增账户变动日志
-        userAccountService.saveUserAccountDetail(rechargeInfo.getUserId(), "用户充值:"+rechargeInfo.getRechargeAmount(), SystemConstant.ACCOUNT_TRADE_TYPE_DEPOSIT, rechargeInfo.getRechargeAmount(), orderNo);
+        userAccountService.saveUserAccountDetail(rechargeInfo.getUserId(), "充值:" + amount, SystemConstant.ACCOUNT_TRADE_TYPE_DEPOSIT, amount, orderNo);
     }
 }
 ```
 
-### 2.1.2 账户充值
-
-**UserAccountService**
-
-```java
-/**
- * 余额充值
- * @param userId
- * @param rechargeAmount
- */
-void recharge(Long userId, BigDecimal rechargeAmount);
-```
-
-**UserAccountServiceImpl**
-
-```java
-/**
- * 余额充值
- * @param userId
- * @param amount
- */
-void recharge(@Param("userId") Long userId, @Param("amount") BigDecimal amount);
-```
-
-**UserAccountMapper.xml**
-
-```xml
-<!--余额充值-->
-<update id="recharge">
-	UPDATE user_account
-	SET total_amount = total_amount + #{amount},
-		available_amount = available_amount + #{amount},
-		total_income_amount = total_income_amount + #{amount}
-	WHERE
-		user_id = #{userId}
-	  AND is_deleted = 0
-</update>
-```
-
-### 2.1.3 提供Feign接口
+### 2.1.2 提供Feign接口
 
 在`service-account-client`模块中提供远程调用Feign接口
 
@@ -1206,7 +1177,7 @@ void recharge(@Param("userId") Long userId, @Param("amount") BigDecimal amount);
 
 ```java
 /**
- * 用户微信支付成功后,完成充值核心业务
+ * 用户付款后处理充值成功业务
  * @param orderNo
  * @return
  */
@@ -1234,22 +1205,19 @@ public Result rechargePaySuccess(String orderNo) {
 
 ```java
 /**
- * 查询当前用户充值记录
+ * 查询用户充值记录
  *
  * @param page
  * @param limit
  * @return
  */
 @GuiGuLogin
-@Operation(summary = "查询当前用户充值记录")
+@Operation(summary = "查询用户充值记录")
 @GetMapping("/userAccount/findUserRechargePage/{page}/{limit}")
 public Result<Page<UserAccountDetail>> getUserRechargePage(@PathVariable int page, @PathVariable int limit) {
-    //1.获取登录用户ID
     Long userId = AuthContextHolder.getUserId();
-    //2.封装分页对象
     Page<UserAccountDetail> pageInfo = new Page<>(page, limit);
-    //3.执行查询
-    userAccountService.getUserAccountDetailPage(pageInfo, userId, SystemConstant.ACCOUNT_TRADE_TYPE_DEPOSIT);
+    rechargeInfoService.getUserAccountDetailPage(pageInfo, SystemConstant.ACCOUNT_TRADE_TYPE_DEPOSIT, userId);
     return Result.ok(pageInfo);
 }
 ```
@@ -1258,61 +1226,37 @@ UserAccountService接口:
 
 ```java
 /**
- * 查询当前用户充值记录
+ * 根据交易类型分页查询账户变动日志
  * @param pageInfo
+ * @param tradeType
  * @param userId
- * @param tradeType 交易类型
+ * @return
  */
-void getUserAccountDetailPage(Page<UserAccountDetail> pageInfo, Long userId, String tradeType);
+void getUserAccountDetailPage(Page<UserAccountDetail> pageInfo, String tradeType, Long userId);
 ```
 
 UserAccountServiceImpl实现类:
 
 ```java
 /**
- * 查询用户账户变动明细
+ * 根据交易类型分页查询账户变动日志
+ *
  * @param pageInfo
+ * @param tradeType
  * @param userId
- * @param tradeType 交易类型
+ * @return
  */
 @Override
-public void getUserAccountDetailPage(Page<UserAccountDetail> pageInfo, Long userId, String tradeType) {
-    userAccountMapper.getUserAccountDetail(pageInfo, userId, tradeType);
+public void getUserAccountDetailPage(Page<UserAccountDetail> pageInfo, String tradeType, Long userId) {
+    //1.创建分页查询条件对象
+    LambdaQueryWrapper<UserAccountDetail> queryWrapper = new LambdaQueryWrapper<>();
+    queryWrapper.eq(UserAccountDetail::getUserId, userId);
+    queryWrapper.eq(UserAccountDetail::getTradeType, tradeType);
+    queryWrapper.select(UserAccountDetail::getOrderNo, UserAccountDetail::getTradeType, UserAccountDetail::getTitle, UserAccountDetail::getAmount);
+    userAccountDetailMapper.selectPage(pageInfo, queryWrapper);
 }
 ```
 
-```java
-/**
- * 查询账户变动日志
- * @param page 分页对象
- * @param userId 用户
- * @param tradeType 交易类型
- * @return
- */
-Page<UserAccountDetail> getUserAccountDetail(Page<UserAccountDetail> page, @Param("userId") Long userId, @Param("tradeType") String tradeType);
-```
-
-xml 配置文件
-
-```xml
-<!--分页查询当前用户充值/消费记录-->
-<select id="getUserAccountDetail" resultType="com.atguigu.tingshu.model.account.UserAccountDetail">
-	SELECT
-		title,
-		amount,
-		create_time,
-		order_no
-	FROM
-		user_account_detail
-	WHERE
-		user_id = #{userId}
-	  AND trade_type = #{tradeType}
-	  AND is_deleted = 0
-	ORDER BY
-		id DESC
-</select>
-```
-
 ## 2.3 消费记录
 
 ![](assets/tingshu046.png)
@@ -1325,33 +1269,28 @@ xml 配置文件
 
 ```java
 /**
- * 查询当前用户消费记录
+ * 查询用户消费记录
  *
  * @param page
  * @param limit
  * @return
  */
 @GuiGuLogin
-@Operation(summary = "查询当前用户消费记录")
+@Operation(summary = "查询用户消费记录")
 @GetMapping("/userAccount/findUserConsumePage/{page}/{limit}")
 public Result<Page<UserAccountDetail>> getUserConsumePage(@PathVariable int page, @PathVariable int limit) {
-    //1.获取登录用户ID
     Long userId = AuthContextHolder.getUserId();
-    //2.封装分页对象
     Page<UserAccountDetail> pageInfo = new Page<>(page, limit);
-    //3.执行查询
-    userAccountService.getUserAccountDetailPage(pageInfo, userId, SystemConstant.ACCOUNT_TRADE_TYPE_MINUS);
+    rechargeInfoService.getUserAccountDetailPage(pageInfo, SystemConstant.ACCOUNT_TRADE_TYPE_MINUS, userId);
     return Result.ok(pageInfo);
 }
 ```
 
 
-测试:充值一百元之后,查看余额与
+测试:充值一百元之后,查看余额与充值记录:
 
 ![](assets/tingshu047.png)
 
 
 
-充值记录:
-
 ![](assets/tingshu048.png)

+ 29 - 70
第9章 分布式任务调度.md

@@ -8,6 +8,9 @@
 - 使用分布式任务调度框架**XXL-JOB**
 - 基于XXL-JOB定时更新Redis中热门专辑
 - 基于XXL-JOB定时更新会员状态
+- 基于XXL-JOB作业
+  - 定时重建布隆过滤器
+  - 定时查询音频审核结果
 
 # 1 定时任务框架
 
@@ -663,37 +666,16 @@ import org.springframework.stereotype.Component;
 @Component
 public class DispatchHandler {
 
-   @Autowired
+    @Autowired
     private SearchFeignClient searchFeignClient;
-
-
+    
     /**
-     * 入门案例:任务
-     */
-    @XxlJob("myJob")
-    public void task1() {
-        //获取任务参数
-        String jobParam = XxlJobHelper.getJobParam();
-        log.info("task1....{}", jobParam);
-
-    }
-
-
-    /**
-     * 定时任务:远程调用搜索服务更新专辑热门排行榜
-     *
-     * @return
+     * 任务逻辑:远程调用搜索服务更新排行榜数据
      */
     @XxlJob("updateAlbumRanking")
-    public ReturnT updateAlbumRanking() {
-        try {
-            log.info("正在执行更新排行榜-远程调用搜索服务更新专辑热门排行榜");
-            searchFeignClient.updateLatelyAlbumRanking();
-            return ReturnT.SUCCESS;
-        } catch (Exception e) {
-            log.error("[任务服务]时任务更新排行榜异常:{}", e);
-            return ReturnT.FAIL;
-        }
+    public void updateAlbumRanking() {
+        log.info("[定时任务]远程调用搜索服务更新排行榜数据");
+        searchFeignClient.updateLatelyAlbumRanking();
     }
 }
 ```
@@ -750,44 +732,29 @@ void updateVipExpireStatus(Date date);
 ```java
 /**
  * 更新VIP状态:处理过期会员
+ *
  * @return
  */
 @Override
 public void updateVipExpireStatus(Date date) {
-    userInfoMapper.updateVipExpireStatus(date);
-}
-```
-
-**UserInfoMapper**
-
-```java
-package com.atguigu.tingshu.user.mapper;
-
-import com.atguigu.tingshu.model.user.UserInfo;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-
-@Mapper
-public interface UserInfoMapper extends BaseMapper<UserInfo> {
-
-    /**
-     * 更新VIP状态:处理过期会员
-     */
-    void updateVipExpireStatus(@Param("date") Date date);
+    //1.查询所有VIP会员
+    LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
+    queryWrapper.eq(UserInfo::getIsVip, 1);
+    List<UserInfo> userInfoList = this.list(queryWrapper);
+
+    //2.判断会员是否过期,如果过期将会员标识修改为0
+    if (CollectionUtil.isNotEmpty(userInfoList)) {
+        for (UserInfo userInfo : userInfoList) {
+            Date vipExpireTime = userInfo.getVipExpireTime();
+            if(vipExpireTime.before(date)){
+                userInfo.setIsVip(0);
+                this.updateById(userInfo);
+            }
+        }
+    }
 }
 ```
 
-**UserInfoMapper.xml**
-
-```sql
-<update id="updateVipExpireStatus">
-	UPDATE user_info set is_vip = 0 where is_deleted =0 and  vip_expire_time &lt; #{date}
-</update>
-```
-
 ### 3.3.2 封装Feign接口
 
 #### UserFeignClient
@@ -840,20 +807,12 @@ public class DispatchHandler {
 
 
     /**
-     * 定时任务:远程调用用户服务更新会员状态
-     *
-     * @return
+     * 任务逻辑:远程调用用户服务更新VIP标识
      */
     @XxlJob("updateVipExpireStatus")
-    public ReturnT updateVipExpireStatus() {
-        try {
-            log.info("正在执行更新会员过期-远程调用用户服务更新会员状态");
-            userFeignClient.updateVipExpireStatus();
-            return ReturnT.SUCCESS;
-        } catch (Exception e) {
-            log.error("[任务服务]定时任务更新VIP异常:{}", e);
-            return ReturnT.FAIL;
-        }
+    public void updateVipExpireStatus() {
+        log.info("[定时任务]远程调用用户服务更新VIP标识");
+        userFeignClient.updateVipExpireStatus();
     }
 }
 ```