You've already forked FrameTour-BE
feat(notify): 支持批量授权记录及景区模板查询
- 新增批量授权记录接口,支持一次请求处理多个模板ID - 新增查询景区通知模板及用户授权余额接口 - 修改授权记录请求体,将单个templateId改为templateIds列表 - 增加授权记录响应结构,区分成功与失败记录 - 新增通知授权工具类,封装常用授权检查与消费方法 - 使用JwtTokenUtil获取当前用户ID替代BaseContextHandler - 移除过时的BaseContextHandler导入及相关代码依赖
This commit is contained in:
165
src/main/java/com/ycwl/basic/utils/NotificationAuthUtils.java
Normal file
165
src/main/java/com/ycwl/basic/utils/NotificationAuthUtils.java
Normal file
@@ -0,0 +1,165 @@
|
||||
package com.ycwl.basic.utils;
|
||||
|
||||
import com.ycwl.basic.model.pc.notify.entity.UserNotificationAuthorizationEntity;
|
||||
import com.ycwl.basic.service.UserNotificationAuthorizationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通知授权工具类
|
||||
* 提供系统内部调用的授权检查和消费功能
|
||||
*
|
||||
* @Author: System
|
||||
* @Date: 2024/12/28
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class NotificationAuthUtils {
|
||||
|
||||
@Autowired
|
||||
private UserNotificationAuthorizationService userNotificationAuthorizationService;
|
||||
|
||||
/**
|
||||
* 检查用户是否对指定模板有授权
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 是否有授权
|
||||
*/
|
||||
public boolean hasAuthorization(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
Integer remainingCount = userNotificationAuthorizationService.getRemainingCount(memberId, templateId, scenicId);
|
||||
return remainingCount != null && remainingCount > 0;
|
||||
} catch (Exception e) {
|
||||
log.error("检查用户授权失败: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户剩余授权次数
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 剩余授权次数,0表示没有剩余
|
||||
*/
|
||||
public int getRemainingCount(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
Integer remainingCount = userNotificationAuthorizationService.getRemainingCount(memberId, templateId, scenicId);
|
||||
return remainingCount != null ? remainingCount : 0;
|
||||
} catch (Exception e) {
|
||||
log.error("获取剩余授权次数失败: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 消费一次授权
|
||||
* 在发送通知前调用此方法消费授权
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 是否消费成功
|
||||
*/
|
||||
public boolean consumeAuthorization(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
boolean result = userNotificationAuthorizationService.consumeAuthorization(memberId, templateId, scenicId);
|
||||
if (result) {
|
||||
log.info("成功消费授权: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId);
|
||||
} else {
|
||||
log.warn("消费授权失败: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId);
|
||||
}
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("消费授权异常: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查并消费授权(原子操作)
|
||||
* 先检查是否有授权,如果有则直接消费
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 是否检查并消费成功
|
||||
*/
|
||||
public boolean checkAndConsumeAuthorization(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
// 先检查剩余次数
|
||||
Integer remainingCount = userNotificationAuthorizationService.getRemainingCount(memberId, templateId, scenicId);
|
||||
if (remainingCount == null || remainingCount <= 0) {
|
||||
log.debug("用户剩余授权次数不足: memberId={}, templateId={}, scenicId={}, remainingCount={}",
|
||||
memberId, templateId, scenicId, remainingCount);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 尝试消费
|
||||
return consumeAuthorization(memberId, templateId, scenicId);
|
||||
} catch (Exception e) {
|
||||
log.error("检查并消费授权异常: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录用户授权
|
||||
* 用户主动同意授权时调用
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 授权记录
|
||||
*/
|
||||
public UserNotificationAuthorizationEntity recordAuthorization(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
return userNotificationAuthorizationService.recordAuthorization(memberId, templateId, scenicId);
|
||||
} catch (Exception e) {
|
||||
log.error("记录用户授权失败: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
throw new RuntimeException("记录用户授权失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量记录用户授权
|
||||
* 用户主动同意多个授权时调用
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateIds 模板ID列表
|
||||
* @param scenicId 景区ID
|
||||
* @return 批量授权记录结果
|
||||
*/
|
||||
public List<UserNotificationAuthorizationService.AuthorizationRecord> batchRecordAuthorization(
|
||||
Long memberId, List<String> templateIds, Long scenicId) {
|
||||
try {
|
||||
return userNotificationAuthorizationService.batchRecordAuthorization(memberId, templateIds, scenicId);
|
||||
} catch (Exception e) {
|
||||
log.error("批量记录用户授权失败: memberId={}, templateIds={}, scenicId={}", memberId, templateIds, scenicId, e);
|
||||
throw new RuntimeException("批量记录用户授权失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户授权详情
|
||||
*
|
||||
* @param memberId 用户ID
|
||||
* @param templateId 模板ID
|
||||
* @param scenicId 景区ID
|
||||
* @return 授权记录,如果没有授权返回null
|
||||
*/
|
||||
public UserNotificationAuthorizationEntity getAuthorizationDetail(Long memberId, String templateId, Long scenicId) {
|
||||
try {
|
||||
return userNotificationAuthorizationService.checkAuthorization(memberId, templateId, scenicId);
|
||||
} catch (Exception e) {
|
||||
log.error("获取用户授权详情失败: memberId={}, templateId={}, scenicId={}", memberId, templateId, scenicId, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user