From 5426ae4b1d662b6ede000571a51beaa35463e0f2 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 08 五月 2026 22:16:16 +0800
Subject: [PATCH] feat:白名单用户下单逻辑
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserWhitelistServiceImpl.java | 61 ++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserWhitelistServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserWhitelistServiceImpl.java
index fdc34c1..da0d29d 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserWhitelistServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserWhitelistServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserWhitelist;
import com.ruoyi.account.api.model.TAppUserWhitelistSite;
+import com.ruoyi.account.api.vo.AppUserWhitelistMatchVO;
import com.ruoyi.account.api.vo.AppUserWhitelistImportErrorVO;
import com.ruoyi.account.api.vo.AppUserWhitelistImportResultVO;
import com.ruoyi.account.mapper.TAppUserWhitelistMapper;
@@ -178,6 +179,66 @@
return result;
}
+ /**
+ * 判断指定用户在指定站点是否命中启用状态的白名单规则
+ *
+ * @param appUserId APP用户ID
+ * @param siteId 站点ID
+ * @return 白名单命中结果
+ */
+ @Override
+ public AppUserWhitelistMatchVO matchWhitelist(Long appUserId, Integer siteId) {
+ AppUserWhitelistMatchVO emptyResult = new AppUserWhitelistMatchVO();
+ if (appUserId == null || siteId == null) {
+ return emptyResult;
+ }
+ TAppUser appUser = appUserService.getById(appUserId);
+ if (appUser == null || StringUtils.isBlank(appUser.getPhone())) {
+ return emptyResult;
+ }
+ TAppUserWhitelist whitelist = this.lambdaQuery()
+ .eq(TAppUserWhitelist::getPhone, appUser.getPhone())
+ .eq(TAppUserWhitelist::getStatus, STATUS_ENABLED)
+ .eq(TAppUserWhitelist::getDelFlag, false)
+ .last("LIMIT 1")
+ .one();
+ if (whitelist == null || !isWhitelistScopeMatched(whitelist, siteId)) {
+ return emptyResult;
+ }
+ AppUserWhitelistMatchVO result = new AppUserWhitelistMatchVO();
+ result.setMatched(true);
+ result.setWhitelistId(whitelist.getId());
+ result.setBenefitType(whitelist.getBenefitType());
+ result.setScopeType(whitelist.getScopeType());
+ result.setBenefitName(getBenefitName(whitelist.getBenefitType()));
+ return result;
+ }
+
+ /**
+ * 根据白名单范围类型判断当前站点是否在可用范围内
+ *
+ * @param whitelist 白名单配置
+ * @param siteId 站点ID
+ * @return true=命中范围
+ */
+ private boolean isWhitelistScopeMatched(TAppUserWhitelist whitelist, Integer siteId) {
+ if (Objects.equals(whitelist.getScopeType(), SCOPE_ALL_SITE)) {
+ return true;
+ }
+ if (Objects.equals(whitelist.getScopeType(), SCOPE_SELECTED_SITE)) {
+ return whitelistSiteService.lambdaQuery()
+ .eq(TAppUserWhitelistSite::getWhitelistId, whitelist.getId())
+ .eq(TAppUserWhitelistSite::getSiteId, siteId)
+ .count() > 0;
+ }
+ if (Objects.equals(whitelist.getScopeType(), SCOPE_PARTNER)) {
+ R<List<Site>> siteResult = siteClient.getSiteByIds(Collections.singletonList(siteId));
+ List<Site> sites = siteResult == null || siteResult.getData() == null ? Collections.emptyList() : siteResult.getData();
+ return !sites.isEmpty() && Objects.equals(sites.get(0).getPartnerId(), whitelist.getPartnerId());
+ }
+ return false;
+ }
+
private int getImportTitleNum(MultipartFile file) throws Exception {
try (InputStream inputStream = file.getInputStream(); Workbook workbook = WorkbookFactory.create(inputStream)) {
Sheet sheet = workbook.getSheetAt(0);
--
Gitblit v1.7.1