Merge remote-tracking branch 'origin/dev/dev' into dev/dev

This commit is contained in:
shahaibo
2025-01-07 11:16:14 +08:00
15 changed files with 144 additions and 18 deletions

View File

@@ -177,11 +177,11 @@ public interface AccountService extends IService<Account> {
void editUserName(String newUserName);
void verifyUserEmail(String verifyCode);
/*void verifyUserEmail(String verifyCode);
void changeUserEmail(String newMailbox);
void activateNewEmail(String token);
void activateNewEmail(String token);*/
String updateNoLoginRequiredNew(NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request);

View File

@@ -47,4 +47,6 @@ public interface StripeService {
List<Map<String,String>> getCustomerPaymentMethod(String name, String email);
String detachCustomerAllPaymentMethod(String name, String email);
String getIp2(HttpServletRequest request);
}

View File

@@ -1621,8 +1621,9 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
UpdateWrapper<Account> accountUpdateWrapper = new UpdateWrapper<>();
// 刷新账号有效期截止之前的年付用户的积分
long epochMilli = Instant.now().toEpochMilli();
accountUpdateWrapper.lambda().set(Account::getCredits, CreditsEventsEnum.INIT_WEEKLY.getValue())
.eq(Account::getSystemUser,1).or().eq(Account::getSystemUser,2)
accountUpdateWrapper.lambda().set(Account::getCredits, CreditsEventsEnum.RESET_YEAR_CREDITS.getValue())
.eq(Account::getSystemUser,1)
// .or().eq(Account::getSystemUser,2)
.gt(Account::getValidEndTime, epochMilli);
baseMapper.update(null,accountUpdateWrapper);
}
@@ -1863,7 +1864,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
}
// 验证是否是本人进行邮箱绑定更改
/*// 验证是否是本人进行邮箱绑定更改
public void verifyUserEmail(String verifyCode){
// 向旧邮箱发送验证码,以保证是当前邮箱拥有者在进行更改
String userEmail = baseMapper.selectById(UserContext.getUserHolder().getId()).getUserEmail();
@@ -1896,7 +1897,6 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// 验证激活链接
public void activateNewEmail(String token){
// 获取链接地址信息,更新指定用户邮箱
String emailAndId = jwtTokenHelper.parseToEmailAndId(token);
String newMailbox = emailAndId.substring(0, emailAndId.lastIndexOf("_"));
String accountId = emailAndId.substring(emailAndId.lastIndexOf("_") + 1);
@@ -1918,7 +1918,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
account.setId(Long.parseLong(accountId));
baseMapper.updateById(account);
log.info("邮箱绑定更改完成用户id:{},新邮箱:{}", accountId, newMailbox);
}
}*/
@Override
public String googleCallback(String code, HttpSession session) {
@@ -2463,6 +2463,8 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
if (!Objects.isNull(affiliate) && affiliate.getStatus().equals("Active")) {
response.setAffiliate(true);
}
response.setUsernameModify(getNicknameModifyTimes());
return response;
}
@@ -2504,7 +2506,6 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
accountExtendInsert.setHeadImgUrl(pictureUrl);
accountExtendInsert.setName(name);
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
accountExtendInsert.setAccountId(authPrincipalVo.getId());
accountExtendMapper.insert(accountExtendInsert);

View File

@@ -592,7 +592,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
// 2、判断用户当前积分是否够本次生成消耗
Boolean preDeduction = creditsService.creditsPreDeduction(creditsEventsEnum, 1);
if (!preDeduction) {
throw new BusinessException("remaining.credits.insufficient");
throw new BusinessException("remaining.credits.insufficient", ResultEnum.WARNING.getCode());
}
// 3、生成唯一id 使用uuid,由于uuid重复的几率很小故取消对uuid重复性的校验

View File

@@ -5,6 +5,7 @@ import com.ai.da.common.constant.CommonConstant;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.*;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.RequestInfoUtil;
import com.ai.da.common.utils.SendEmailUtil;
import com.ai.da.mapper.primary.AccountMapper;
import com.ai.da.mapper.primary.PaymentInfoMapper;
@@ -17,6 +18,7 @@ import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.model.dto.SubscriptionEmailParamsDTO;
import com.ai.da.service.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.gson.Gson;
@@ -36,8 +38,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@@ -1145,5 +1151,96 @@ public class StripeServiceImpl implements StripeService {
}
}
public String getIp2(HttpServletRequest request) {
/*String ip = request.getHeader("X-Forwarded-For");
String ipAddress = "";
if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
//多次反向代理后会有多个ip值第一个ip才是真实ip
int index = ip.indexOf(",");
if(index != -1){
ipAddress = ip.substring(0,index);
}else{
ipAddress = ip;
}
}
ip = request.getHeader("X-Real-IP");
if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
ipAddress = ip;
}
if (!StringUtil.isNullOrEmpty(ipAddress)) {
getIPLocation(ipAddress);
}*/
String ipAddress = RequestInfoUtil.getIpAddress(request);
if (!StringUtil.isNullOrEmpty(ipAddress)) {
return getIPLocation(ipAddress);
}
return request.getRemoteAddr();
}
/* 免费 API 服务可能有请求频率限制,如果你需要处理大量 IP 地址,可能需要考虑使用付费服务或购买 IP 地理位置数据库。此外,始终要遵守 API 提供商的使用条款和隐私政策。*/
public String getIPLocation(String ip) {
// String ip = "117.143.125.1"; // 替换为你想查询的 IP 地址
// String ip = "194.5.48.180"; // 替换为你想查询的 IP 地址
String apiURL = "http://ip-api.com/json/" + ip;
try {
URL url = new URL(apiURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output;
StringBuilder outputBuilder = new StringBuilder();
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
outputBuilder.append(output);
System.out.println(output);
}
conn.disconnect();
Map map = JSONObject.parseObject(outputBuilder.toString(), Map.class);
log.info("map: {}", map);
return JSON.toJSONString(map);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String ip = "117.143.125.1"; // 替换为你想查询的 IP 地址
// String ip = "194.5.48.180"; // 替换为你想查询的 IP 地址
String apiURL = "http://ip-api.com/json/" + ip;
try {
URL url = new URL(apiURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String output;
System.out.println("Output from Server .... \n");
StringBuilder outputBuilder = new StringBuilder();
while ((output = br.readLine()) != null) {
outputBuilder.append(output);
System.out.println(output);
}
conn.disconnect();
Map map = JSONObject.parseObject(outputBuilder.toString(), Map.class);
log.info("map: {}", map);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -5,6 +5,7 @@ import com.ai.da.mapper.primary.entity.Tags;
import com.ai.da.service.TagsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -19,7 +20,10 @@ public class TagsServiceImpl extends ServiceImpl<TagsMapper, Tags> implements Ta
public List<Tags> getTags(String tagPrefix){
// 1、根据tag前缀,查询
QueryWrapper<Tags> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("tag_name", tagPrefix);
if (!StringUtil.isNullOrEmpty(tagPrefix)) {
queryWrapper.like("tag_name", tagPrefix);
}
queryWrapper.orderByDesc("id").last("limit 10");
// 需返回标签内容和id
return baseMapper.selectList(queryWrapper);