You've already forked FrameTour-BE
2
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
package com.ycwl.basic.service.pc.helper;
|
||||
|
||||
import com.ycwl.basic.repository.ScenicRepository;
|
||||
import com.ycwl.basic.integration.common.manager.ScenicConfigManager;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 景区配置门面类
|
||||
* 提供类型安全的配置访问方法,避免配置键的字符串硬编码
|
||||
* 集中管理所有景区配置项的访问逻辑
|
||||
*
|
||||
* @author Claude
|
||||
* @since 2025-10-31
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ScenicConfigFacade {
|
||||
|
||||
@Autowired
|
||||
private ScenicRepository scenicRepository;
|
||||
|
||||
/**
|
||||
* 获取景区配置管理器
|
||||
*/
|
||||
private ScenicConfigManager getConfig(Long scenicId) {
|
||||
return scenicRepository.getScenicConfigManager(scenicId);
|
||||
}
|
||||
|
||||
// ==================== 人脸识别相关配置 ====================
|
||||
|
||||
/**
|
||||
* 是否优先手动选择人脸
|
||||
* 如果为 true,则不自动创建任务
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return true-需要手动选择,false-自动创建任务
|
||||
*/
|
||||
public boolean isFaceSelectFirst(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return false;
|
||||
}
|
||||
Boolean value = config.getBoolean("face_select_first");
|
||||
return Boolean.TRUE.equals(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义人脸匹配的最大次数
|
||||
* 用于限制用户手动重新匹配的次数
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 最大匹配次数,null 或 0 表示不限制
|
||||
*/
|
||||
public Integer getFaceSelectMaxCount(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return null;
|
||||
}
|
||||
return config.getInteger("face_select_max_count");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取人脸分数低阈值
|
||||
* 低于此分数的匹配结果会被标记为低置信度
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 分数阈值,默认 30.0
|
||||
*/
|
||||
public Float getFaceScoreLowThreshold(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return 30.0F;
|
||||
}
|
||||
return config.getFloat("face_score_low_threshold", 30.0F);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取人脸检测辅助阈值
|
||||
* 当匹配结果数量少于此阈值时,会触发补救逻辑
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 辅助阈值,默认 0(不启用)
|
||||
*/
|
||||
public Integer getFaceDetectHelperThreshold(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return 0;
|
||||
}
|
||||
return config.getInteger("face_detect_helper_threshold", 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取人脸选择后处理模式
|
||||
* 0-并集模式,1-交集模式
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 后处理模式,默认 0
|
||||
*/
|
||||
public Integer getFaceSelectPostMode(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return 0;
|
||||
}
|
||||
return config.getInteger("face_select_post_mode", 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取重新匹配模式
|
||||
* 用于决定在什么条件下需要重新进行人脸匹配
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 匹配模式,默认 0
|
||||
*/
|
||||
public Integer getRematchMode(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return 0;
|
||||
}
|
||||
return config.getInteger("re_match_mode", 0);
|
||||
}
|
||||
|
||||
// ==================== 源文件相关配置 ====================
|
||||
|
||||
/**
|
||||
* 是否禁用源图片功能
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return true-禁用,false-启用
|
||||
*/
|
||||
public boolean isDisableSourceImage(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return false;
|
||||
}
|
||||
Boolean value = config.getBoolean("disable_source_image");
|
||||
return Boolean.TRUE.equals(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否禁用源视频功能
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return true-禁用,false-启用
|
||||
*/
|
||||
public boolean isDisableSourceVideo(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return false;
|
||||
}
|
||||
Boolean value = config.getBoolean("disable_source_video");
|
||||
return Boolean.TRUE.equals(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取免费照片数量
|
||||
* 新用户首次识别时赠送的免费照片数量
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 免费照片数量,null 或 0 表示不赠送
|
||||
*/
|
||||
public Integer getPhotoFreeNum(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return null;
|
||||
}
|
||||
return config.getInteger("photo_free_num");
|
||||
}
|
||||
|
||||
// ==================== 游玩时间相关配置 ====================
|
||||
|
||||
/**
|
||||
* 获取最大游玩时间(分钟)
|
||||
* 用于判断照片是否在合理的游玩时间范围内
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 最大游玩时间(分钟),null 表示不限制
|
||||
*/
|
||||
public Integer getTourTime(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return null;
|
||||
}
|
||||
return config.getInteger("tour_time");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最小游玩时间(分钟)
|
||||
* 用于判断照片是否在合理的游玩时间范围内
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return 最小游玩时间(分钟),null 表示不限制
|
||||
*/
|
||||
public Integer getTourMinTime(Long scenicId) {
|
||||
ScenicConfigManager config = getConfig(scenicId);
|
||||
if (config == null) {
|
||||
return null;
|
||||
}
|
||||
return config.getInteger("tour_min_time");
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否配置了游玩时间限制
|
||||
*
|
||||
* @param scenicId 景区ID
|
||||
* @return true-已配置,false-未配置
|
||||
*/
|
||||
public boolean hasTourTimeConfig(Long scenicId) {
|
||||
Integer maxTime = getTourTime(scenicId);
|
||||
Integer minTime = getTourMinTime(scenicId);
|
||||
return maxTime != null && minTime != null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user