模拟登录第三方接口
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成唯一ID:id + '_' + tenant_id
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user