模拟登录第三方接口

This commit is contained in:
2026-06-03 17:38:21 +08:00
parent 6ce698eecc
commit 7b3879d6b6
13 changed files with 423 additions and 0 deletions

View File

@@ -3,18 +3,27 @@ package com.rj.service.impl;
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 com.rj.dto.LbFanSimulateLoginRequest;
import com.rj.dto.hxr.HxrUserLoginApiContext;
import com.rj.entity.LbFanManagement;
import com.rj.mapper.LbFanManagementMapper;
import com.rj.service.HxrAdminUserLoginService;
import com.rj.service.ILbFanManagementService;
import com.rj.service.ILbThirdIntegrationConfigService;
import com.rj.tenant.TenantContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* 粉丝管理服务实现
@@ -25,6 +34,14 @@ public class LbFanManagementServiceImpl
extends ServiceImpl<LbFanManagementMapper, LbFanManagement>
implements ILbFanManagementService {
@Autowired
private ILbThirdIntegrationConfigService lbThirdIntegrationConfigService;
@Autowired
private HxrAdminUserLoginService hxrAdminUserLoginService;
private static final String DEFAULT_SIMULATE_LOGIN_PASSWORD = "123456";
private static final DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -208,6 +225,97 @@ public class LbFanManagementServiceImpl
}
}
@Override
public Map<String, Object> simulateLogin(LbFanSimulateLoginRequest request) {
Map<String, Object> result = new HashMap<>();
try {
if (request == null) {
result.put("success", false);
result.put("message", "请求体不能为空");
return result;
}
if (request.getTenantId() == null || request.getTenantId().trim().isEmpty()) {
result.put("success", false);
result.put("message", "tenantId不能为空");
return result;
}
if (request.getMobiles() == null || request.getMobiles().isEmpty()) {
result.put("success", false);
result.put("message", "手机号列表不能为空");
return result;
}
String tenantId = request.getTenantId().trim();
Optional<HxrUserLoginApiContext> ctxOpt =
lbThirdIntegrationConfigService.resolveUserLoginApiContext(tenantId);
if (ctxOpt.isEmpty()) {
result.put("success", false);
result.put("message",
"未找到该租户的第三方集成配置或配置未启用、URL 不完整(请检查 lb_third_integration_config");
return result;
}
HxrUserLoginApiContext ctx = ctxOpt.get();
List<Map<String, Object>> items = new ArrayList<>();
int successCount = 0;
int failCount = 0;
String requestPassword = request.getPassword() != null ? request.getPassword().trim() : "";
for (String rawMobile : request.getMobiles()) {
Map<String, Object> item = new LinkedHashMap<>();
if (rawMobile == null || rawMobile.trim().isEmpty()) {
item.put("mobile", rawMobile);
item.put("loginSuccess", false);
item.put("apiCode", -1);
item.put("apiMsg", "手机号为空");
items.add(item);
failCount++;
continue;
}
String mobile = rawMobile.trim();
item.put("mobile", mobile);
String password = !requestPassword.isEmpty()
? requestPassword
: DEFAULT_SIMULATE_LOGIN_PASSWORD;
try {
HxrAdminUserLoginService.LoginApiResult loginResult =
hxrAdminUserLoginService.login(mobile, password, ctx);
item.put("httpStatus", loginResult.httpStatus());
item.put("apiCode", loginResult.apiCode());
item.put("apiMsg", loginResult.apiMsg());
item.put("loginSuccess", loginResult.success());
item.put("parsed", loginResult.parsed());
if (loginResult.success()) {
successCount++;
} else {
failCount++;
}
} catch (Exception e) {
log.warn("粉丝模拟登录异常 mobile={} tenantId={}", mobile, tenantId, e);
item.put("loginSuccess", false);
item.put("apiCode", -1);
item.put("apiMsg", "请求异常:" + e.getMessage());
failCount++;
}
items.add(item);
}
result.put("success", true);
result.put("message", "模拟登录完成");
result.put("data", items);
result.put("successCount", successCount);
result.put("failCount", failCount);
result.put("loginApiUrl", ctx.loginApiUrl());
return result;
} catch (Exception e) {
log.error("粉丝模拟登录异常", e);
result.put("success", false);
result.put("message", "模拟登录异常:" + e.getMessage());
return result;
}
}
/**
* 生成唯一IDid + '_' + tenant_id
*/

View File

@@ -9,6 +9,7 @@ import com.rj.dto.LbThirdIntegrationCredentialUpdateRequest;
import com.rj.dto.hxr.HxrAdminOrderApiContext;
import com.rj.dto.hxr.HxrAdminUserApiContext;
import com.rj.dto.hxr.HxrGoodsApiContext;
import com.rj.dto.hxr.HxrUserLoginApiContext;
import com.rj.entity.LbThirdIntegrationConfig;
import com.rj.mapper.LbThirdIntegrationConfigMapper;
import com.rj.service.ILbThirdIntegrationConfigService;
@@ -371,6 +372,31 @@ public class LbThirdIntegrationConfigServiceImpl
}
}
@Override
public Optional<HxrUserLoginApiContext> resolveUserLoginApiContext(String tenantId) {
if (!StringUtils.hasText(tenantId)) {
return Optional.empty();
}
LbThirdIntegrationConfig config = getByTenantIdOrNull(tenantId.trim());
if (config == null) {
return Optional.empty();
}
if (config.getEnabled() == null || config.getEnabled() != 1) {
return Optional.empty();
}
try {
String appStr = config.getGoodsApiAppStr();
return Optional.of(new HxrUserLoginApiContext(
LbThirdIntegrationConfigUtil.resolveLoginApiUrl(config),
LbThirdIntegrationConfigUtil.resolveGoodsApiOrigin(config),
LbThirdIntegrationConfigUtil.resolveGoodsApiReferer(config),
StringUtils.hasText(appStr) ? appStr.trim() : null));
} catch (IllegalStateException e) {
return Optional.empty();
}
}
@Override
public Optional<HxrAdminOrderApiContext> resolveAdminOrderApiContext(String tenantId) {
if (!StringUtils.hasText(tenantId)) {
@@ -523,6 +549,12 @@ public class LbThirdIntegrationConfigServiceImpl
if (!StringUtils.hasText(entity.getBuyApiPath())) {
entity.setBuyApiPath(LbThirdIntegrationConstants.DEFAULT_BUY_API_PATH);
}
if (!StringUtils.hasText(entity.getFansApiPath())) {
entity.setFansApiPath(LbThirdIntegrationConstants.DEFAULT_FANS_API_PATH);
}
if (!StringUtils.hasText(entity.getLoginApiPath())) {
entity.setLoginApiPath(LbThirdIntegrationConstants.DEFAULT_LOGIN_API_PATH);
}
if (entity.getOrderPageLimit() == null) {
entity.setOrderPageLimit(LbThirdIntegrationConstants.DEFAULT_ORDER_PAGE_LIMIT);
}
@@ -532,6 +564,9 @@ public class LbThirdIntegrationConfigServiceImpl
if (entity.getGoodsPageLimit() == null) {
entity.setGoodsPageLimit(LbThirdIntegrationConstants.DEFAULT_GOODS_PAGE_LIMIT);
}
if (entity.getFansPageLimit() == null) {
entity.setFansPageLimit(LbThirdIntegrationConstants.DEFAULT_FANS_PAGE_LIMIT);
}
if (!StringUtils.hasText(entity.getAuthType())) {
entity.setAuthType(LbThirdIntegrationConstants.AUTH_COOKIE_PHPSID);
}