Compare commits
7 Commits
dev/dev_xp
...
798c7b0592
| Author | SHA1 | Date | |
|---|---|---|---|
| 798c7b0592 | |||
| 9bd10581f4 | |||
| 1f288fe5e3 | |||
| 72602eb245 | |||
| 983d53268d | |||
| f3aeeb3584 | |||
| 5d3692a204 |
@@ -1030,25 +1030,15 @@ public class SendEmailUtil {
|
|||||||
|
|
||||||
private final static Long CN_2025_618 = 141425L;
|
private final static Long CN_2025_618 = 141425L;
|
||||||
private final static Long EN_2025_618 = 141424L;
|
private final static Long EN_2025_618 = 141424L;
|
||||||
|
|
||||||
private final static Long CN_GLOBAL_AWARDS = 166716L;
|
|
||||||
private final static Long EN_GLOBAL_AWARDS = 166715L;
|
|
||||||
private final static Long GLOBAL_AWARDS_2 = 173919L;
|
|
||||||
|
|
||||||
// 复用 SesClient,避免每次发送都创建新连接
|
|
||||||
private static SesClient getSesClient() {
|
|
||||||
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
|
|
||||||
HttpProfile httpProfile = new HttpProfile();
|
|
||||||
httpProfile.setEndpoint("ses.tencentcloudapi.com");
|
|
||||||
ClientProfile clientProfile = new ClientProfile();
|
|
||||||
clientProfile.setHttpProfile(httpProfile);
|
|
||||||
return new SesClient(cred, "ap-hongkong", clientProfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void send618PromotionEmailTemp(String receiver, String language){
|
public static void send618PromotionEmailTemp(String receiver, String language){
|
||||||
SesClient client = null;
|
|
||||||
try {
|
try {
|
||||||
client = getSesClient();
|
// 实例化一个认证对象
|
||||||
|
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
|
||||||
|
HttpProfile httpProfile = new HttpProfile();
|
||||||
|
httpProfile.setEndpoint("ses.tencentcloudapi.com");
|
||||||
|
ClientProfile clientProfile = new ClientProfile();
|
||||||
|
clientProfile.setHttpProfile(httpProfile);
|
||||||
|
SesClient client = new SesClient(cred, "ap-hongkong", clientProfile);
|
||||||
SendEmailRequest req = new SendEmailRequest();
|
SendEmailRequest req = new SendEmailRequest();
|
||||||
req.setFromEmailAddress(CODE_CREATE_SEND_ADDRESS);
|
req.setFromEmailAddress(CODE_CREATE_SEND_ADDRESS);
|
||||||
req.setDestination(new String[]{receiver});
|
req.setDestination(new String[]{receiver});
|
||||||
@@ -1056,15 +1046,20 @@ public class SendEmailUtil {
|
|||||||
// 根据邮件类型设置不同的主题和模板
|
// 根据邮件类型设置不同的主题和模板
|
||||||
String subject = "";
|
String subject = "";
|
||||||
Template template = new Template();
|
Template template = new Template();
|
||||||
subject = "AiDA Global Design Awards 2026 | The Journey Starts Now ! \nAiDA 全球设计大奖 2026 | 从现在开始你的创作之旅 !";
|
// if (type == 1) {
|
||||||
template.setTemplateID(GLOBAL_AWARDS_2);
|
// subject = "Upcoming System Upgrade for AiDA 3.0";
|
||||||
/*if (language.equals("ENGLISH")) {
|
// template.setTemplateID(UPGRADE_NOTIFICATION_ID);
|
||||||
subject = "From Idea to Wow. \uD83D\uDD25 | AiDA Demo & Global Awards";
|
// }else {
|
||||||
template.setTemplateID(EN_GLOBAL_AWARDS);
|
// subject = "即将到来的AiDA 3.0系统升级";
|
||||||
|
// template.setTemplateID(UPGRADE_NOTIFICATION_ID_CHINESE);
|
||||||
|
// }
|
||||||
|
if (language.equals("ENGLISH")) {
|
||||||
|
subject = "Welcome back !Subscribe AiDA with the discount code to enjoy 50% OFF!";
|
||||||
|
template.setTemplateID(EN_2025_618);
|
||||||
}else {
|
}else {
|
||||||
subject = "灵感开挂,创作起飞 \uD83D\uDD25 | AiDA Demo & 全球设计大奖";
|
subject = "设计时速狂飙!AiDA 618半价让灵感永不限流!";
|
||||||
template.setTemplateID(CN_GLOBAL_AWARDS);
|
template.setTemplateID(CN_2025_618);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
req.setSubject(subject);
|
req.setSubject(subject);
|
||||||
req.setTemplate(template);
|
req.setTemplate(template);
|
||||||
@@ -1074,7 +1069,9 @@ public class SendEmailUtil {
|
|||||||
log.info("邮件发送成功,收件人地址:{}", receiver);
|
log.info("邮件发送成功,收件人地址:{}", receiver);
|
||||||
log.info("短信发送结果res###{}", SendEmailResponse.toJsonString(resp));
|
log.info("短信发送结果res###{}", SendEmailResponse.toJsonString(resp));
|
||||||
} catch (TencentCloudSDKException e) {
|
} catch (TencentCloudSDKException e) {
|
||||||
log.error("邮件发送失败,收件人地址:{},错误信息:{}", receiver, e.toString());
|
log.info(receiver);
|
||||||
|
log.error("邮件发送失败###{},收件人地址:{}", e.toString(), receiver);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,92 +20,72 @@ public class SendRequestUtil {
|
|||||||
@Value("${FREEPIK_API_KEY}")
|
@Value("${FREEPIK_API_KEY}")
|
||||||
private String FREEPIK_API_KEY;
|
private String FREEPIK_API_KEY;
|
||||||
|
|
||||||
public String sendAliYunPostAsync(String apiUrl, String requestBody) {
|
public String sendAliYunPostAsync(String apiUrl, String requestBody){
|
||||||
// 发送POST请求
|
// 发送POST请求 todo 异常处理
|
||||||
try (HttpResponse execute = HttpRequest.post(apiUrl)
|
HttpResponse execute = HttpRequest.post(apiUrl)
|
||||||
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
||||||
.header("X-DashScope-Async", "enable")
|
.header("X-DashScope-Async", "enable")
|
||||||
.header(Header.CONTENT_TYPE, "application/json")
|
.header(Header.CONTENT_TYPE, "application/json")
|
||||||
.body(requestBody)
|
.body(requestBody)
|
||||||
.timeout(20000) // 设置超时时间20秒
|
.timeout(20000) // 设置超时时间20秒
|
||||||
.execute()) {
|
.execute();
|
||||||
|
int status = execute.getStatus();
|
||||||
int status = execute.getStatus();
|
if (status == 200){
|
||||||
if (status == 200) {
|
String body = execute.body();
|
||||||
String body = execute.body();
|
JSONObject bodyJson = JSONUtil.parseObj(body);
|
||||||
JSONObject bodyJson = JSONUtil.parseObj(body);
|
return body;
|
||||||
return body;
|
|
||||||
}
|
|
||||||
log.warn("请求失败,状态码为:{},响应内容:{}", status, execute.body());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("请求阿里云API时发生异常,URL:{},请求体:{},异常信息:{}",
|
|
||||||
apiUrl, requestBody, e.getMessage(), e);
|
|
||||||
}
|
}
|
||||||
|
log.warn("请求失败,状态码为 : {}", status);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String sendAliYunPost(String apiUrl, String requestBody) {
|
public String sendAliYunPost(String apiUrl, String requestBody){
|
||||||
// 发送POST请求
|
// 发送POST请求 todo 异常处理
|
||||||
try (HttpResponse execute = HttpRequest.post(apiUrl)
|
HttpResponse execute = HttpRequest.post(apiUrl)
|
||||||
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
||||||
.header(Header.CONTENT_TYPE, "application/json")
|
.header(Header.CONTENT_TYPE, "application/json")
|
||||||
.body(requestBody)
|
.body(requestBody)
|
||||||
.timeout(20000) // 设置超时时间20秒
|
.timeout(20000) // 设置超时时间20秒
|
||||||
.execute()) {
|
.execute();
|
||||||
|
int status = execute.getStatus();
|
||||||
int status = execute.getStatus();
|
if (status == 200){
|
||||||
if (status == 200) {
|
String body = execute.body();
|
||||||
String body = execute.body();
|
JSONObject bodyJson = JSONUtil.parseObj(body);
|
||||||
JSONObject bodyJson = JSONUtil.parseObj(body);
|
return body;
|
||||||
return body;
|
|
||||||
}
|
|
||||||
log.warn("请求失败,状态码为:{},响应内容:{}", status, execute.body());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("请求阿里云API时发生异常,URL:{},请求体:{},异常信息:{}",
|
|
||||||
apiUrl, requestBody, e.getMessage(), e);
|
|
||||||
}
|
}
|
||||||
|
log.warn("请求失败,状态码为 : {}", status);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String FREE_PIK = "https://api.freepik.com/v1/ai/beta/text-to-image/reimagine-flux";
|
public static final String FREE_PIK = "https://api.freepik.com/v1/ai/beta/text-to-image/reimagine-flux";
|
||||||
public String sendFreepikPost(String requestBody) {
|
public String sendFreepikPost( String requestBody){
|
||||||
// 发送POST请求
|
// 发送POST请求 todo 异常处理
|
||||||
try (HttpResponse execute = HttpRequest.post(FREE_PIK)
|
HttpResponse execute = HttpRequest.post(FREE_PIK)
|
||||||
.header(Header.CONTENT_TYPE, "application/json")
|
.header(Header.CONTENT_TYPE, "application/json")
|
||||||
.header("x-freepik-api-key", FREEPIK_API_KEY)
|
.header("x-freepik-api-key", FREEPIK_API_KEY)
|
||||||
.body(requestBody)
|
.body(requestBody)
|
||||||
.timeout(20000) // 设置超时时间20秒
|
.timeout(20000) // 设置超时时间20秒
|
||||||
.execute()) {
|
.execute();
|
||||||
|
int status = execute.getStatus();
|
||||||
int status = execute.getStatus();
|
if (status == 200){
|
||||||
if (status == 200) {
|
return execute.body();
|
||||||
return execute.body();
|
|
||||||
}
|
|
||||||
log.warn("请求失败,状态码为:{},响应内容:{}", status, execute.body());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("请求Freepik API时发生异常,请求体:{},异常信息:{}",
|
|
||||||
requestBody, e.getMessage(), e);
|
|
||||||
}
|
}
|
||||||
|
log.warn("请求失败,状态码为 : {}", status);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String sendAliYunGet(String fullUrl) {
|
public String sendAliYunGet(String fullUrl){
|
||||||
// 发送GET请求
|
// 发送GET请求 todo 异常处理
|
||||||
try (HttpResponse httpResponse = HttpRequest.get(fullUrl)
|
HttpResponse httpResponse = HttpRequest.get(fullUrl)
|
||||||
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
.header(Header.AUTHORIZATION, "Bearer " + ALIYUN_API_KEY)
|
||||||
.timeout(20000) // 设置超时时间20秒
|
.timeout(20000) // 设置超时时间20秒
|
||||||
.execute()) {
|
.execute();
|
||||||
|
int status = httpResponse.getStatus();
|
||||||
int status = httpResponse.getStatus();
|
if (status == 200){
|
||||||
if (status == 200) {
|
return httpResponse.body();
|
||||||
return httpResponse.body();
|
}else {
|
||||||
}
|
return null;
|
||||||
log.warn("请求失败,状态码为:{},响应内容:{}", status, httpResponse.body());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("请求阿里云API时发生异常,URL:{},异常信息:{}",
|
|
||||||
fullUrl, e.getMessage(), e);
|
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public String sendFluxPost(String url, String requestBodyStr){
|
/*public String sendFluxPost(String url, String requestBodyStr){
|
||||||
|
|||||||
@@ -380,12 +380,12 @@ public class AccountController {
|
|||||||
return Response.success(accountService.subAccountImport(file));
|
return Response.success(accountService.subAccountImport(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/send618Email")
|
/*@GetMapping("/send618Email")
|
||||||
@Operation(summary = "618邮件发送")
|
@Operation(summary = "618邮件发送")
|
||||||
public Response<String> send618PromotionEmailTemp() {
|
public Response<String> send618PromotionEmailTemp() {
|
||||||
accountService.send618PromotionEmailTemp();
|
accountService.send618PromotionEmailTemp();
|
||||||
return Response.success("success");
|
return Response.success("success");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*@GetMapping("/refreshCreditsMonthly")
|
/*@GetMapping("/refreshCreditsMonthly")
|
||||||
@Operation(summary = "刷新子账号积分")
|
@Operation(summary = "刷新子账号积分")
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ public interface AccountService extends IService<Account> {
|
|||||||
|
|
||||||
Set<String> organizationNameSearch(String type, String name);
|
Set<String> organizationNameSearch(String type, String name);
|
||||||
|
|
||||||
void send618PromotionEmailTemp();
|
/*void send618PromotionEmailTemp();*/
|
||||||
|
|
||||||
void checkEduAdminExpireStatus();
|
void checkEduAdminExpireStatus();
|
||||||
|
|
||||||
|
|||||||
@@ -3670,66 +3670,33 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
return new HashSet<>();
|
return new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/* @Override
|
||||||
public void send618PromotionEmailTemp() {
|
public void send618PromotionEmailTemp() {
|
||||||
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<TrialOrder> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("is_deleted", 0);
|
||||||
|
|
||||||
queryWrapper.lambda()
|
List<TrialOrder> trialOrders = trialOrderMapper.selectList(queryWrapper);
|
||||||
.isNotNull(Account::getUserEmail)
|
|
||||||
.in(Account::getUserEmail, "xupei3360@163.com", "kimwong@code-create.com.hk", "kaicpang.pang@connect.polyu.hk", "chelseayu@code-create.com.hk")
|
|
||||||
.apply("LENGTH(TRIM(user_email)) > 0");
|
|
||||||
|
|
||||||
List<Account> accounts = baseMapper.selectList(queryWrapper);
|
|
||||||
|
|
||||||
// 按邮箱去重,保留每个邮箱的第一条记录
|
|
||||||
Map<String, Account> emailToAccountMap = new LinkedHashMap<>();
|
|
||||||
for (Account account : accounts) {
|
|
||||||
String email = account.getUserEmail();
|
|
||||||
if (!StringUtil.isNullOrEmpty(email)) {
|
|
||||||
email = email.trim().toLowerCase();
|
|
||||||
// 保留第一次出现的记录
|
|
||||||
emailToAccountMap.putIfAbsent(email, account);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> uniqueEmails = new ArrayList<>(emailToAccountMap.keySet());
|
|
||||||
int total = uniqueEmails.size();
|
|
||||||
log.info("AiDA用户去重后邮件发送总量:{}", total);
|
|
||||||
|
|
||||||
// 控制发送速率:每发送20封后等待1秒,控制QPS在20以内
|
|
||||||
int batchSize = 20;
|
|
||||||
long sleepMillis = 1000;
|
|
||||||
int successCount = 0;
|
|
||||||
int failCount = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < uniqueEmails.size(); i++) {
|
|
||||||
String email = uniqueEmails.get(i);
|
|
||||||
log.info("邮件发送进度 {}/{}", i + 1, total);
|
|
||||||
|
|
||||||
|
// List<Account> accountList = accountMapper.selectList(queryWrapper);
|
||||||
|
System.out.println(trialOrders);
|
||||||
|
int total = trialOrders.size();
|
||||||
|
log.info("试用用户总量:{}", total);
|
||||||
|
int current = 1;
|
||||||
|
for (TrialOrder trialOrder : trialOrders) {
|
||||||
|
log.info("邮件发送进度 {}/{}", current, total);
|
||||||
try {
|
try {
|
||||||
// 统一发送英文版本
|
if (!StringUtil.isNullOrEmpty(trialOrder.getCountry()) && trialOrder.getCountry().equals("China")) {
|
||||||
// log.info("邮件地址 {}", email);
|
SendEmailUtil.send618PromotionEmailTemp(trialOrder.getEmail(), "CHINESE_SIMPLIFIED");
|
||||||
SendEmailUtil.send618PromotionEmailTemp(email, "ENGLISH");
|
} else {
|
||||||
successCount++;
|
// 英文
|
||||||
} catch (Exception e) {
|
SendEmailUtil.send618PromotionEmailTemp(trialOrder.getEmail(), "ENGLISH");
|
||||||
failCount++;
|
|
||||||
log.error("邮件发送失败,收件人:{},错误信息:{}", email, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 控制发送速率,每发送 batchSize 封后等待
|
|
||||||
if ((i + 1) % batchSize == 0 && (i + 1) < uniqueEmails.size()) {
|
|
||||||
try {
|
|
||||||
Thread.sleep(sleepMillis);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
log.warn("邮件发送被中断");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.info(e.getMessage());
|
||||||
}
|
}
|
||||||
|
current ++;
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
log.info("邮件发送完成,成功:{},失败:{}", successCount, failCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void checkEduAdminExpireStatus() {
|
public void checkEduAdminExpireStatus() {
|
||||||
|
|||||||
@@ -1060,11 +1060,12 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
String periodEnd = DateUtil.changeTimeStampFormat(subscriptionInfo.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_yyyy_MM_dd_HH_mm_ss);
|
String periodEnd = DateUtil.changeTimeStampFormat(subscriptionInfo.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_yyyy_MM_dd_HH_mm_ss);
|
||||||
|
|
||||||
qwPI.lambda().eq(PaymentInfo::getOrderNo, subscriptionInfo.getOrderNo())
|
qwPI.lambda().eq(PaymentInfo::getOrderNo, subscriptionInfo.getOrderNo())
|
||||||
|
.eq(PaymentInfo::getTradeState, "paid")
|
||||||
.between(PaymentInfo::getCreateTime, periodStart, periodEnd)
|
.between(PaymentInfo::getCreateTime, periodStart, periodEnd)
|
||||||
.orderByDesc(PaymentInfo::getId);
|
.orderByDesc(PaymentInfo::getId);
|
||||||
List<PaymentInfo> paymentInfos = paymentInfoMapper.selectList(qwPI);
|
List<PaymentInfo> paymentInfos = paymentInfoMapper.selectList(qwPI);
|
||||||
if (paymentInfos.isEmpty()) {
|
if (paymentInfos.isEmpty()) {
|
||||||
log.info("不发送邮件,原因:【根据order_no:{},查询到的paymentInfos为空】", orderNo);
|
log.info("不发送邮件,原因:【根据order_no:{},查询到的成功的paymentInfos为空】", orderNo);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PaymentInfo paymentInfo = paymentInfos.get(0);
|
PaymentInfo paymentInfo = paymentInfos.get(0);
|
||||||
|
|||||||
@@ -905,15 +905,15 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 将构建好的结果对象添加到返回列表
|
// 将构建好的结果对象添加到返回列表
|
||||||
results.add(magicToolResultVO);
|
// results.add(magicToolResultVO);
|
||||||
} else if (Objects.isNull(magicToolResultVO)) {
|
} else if (Objects.isNull(magicToolResultVO)) {
|
||||||
// 如果Redis中没有结果对象,创建执行中状态的结果对象
|
// 如果Redis中没有结果对象,创建执行中状态的结果对象
|
||||||
magicToolResultVO = new MagicToolResultVO(taskId, "Executing");
|
magicToolResultVO = new MagicToolResultVO(taskId, "Executing");
|
||||||
results.add(magicToolResultVO);
|
// results.add(magicToolResultVO);
|
||||||
} else {
|
}/* else {
|
||||||
// 如果Redis中有结果对象但URL为空,直接添加到返回列表
|
// 如果Redis中有结果对象但URL为空,直接添加到返回列表
|
||||||
results.add(magicToolResultVO);
|
results.add(magicToolResultVO);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// 收集任务状态用于统计
|
// 收集任务状态用于统计
|
||||||
if (!StringUtil.isNullOrEmpty(magicToolResultVO.getStatus())) collect.add(magicToolResultVO.getStatus());
|
if (!StringUtil.isNullOrEmpty(magicToolResultVO.getStatus())) collect.add(magicToolResultVO.getStatus());
|
||||||
@@ -1461,12 +1461,16 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
if (StringUtil.isNullOrEmpty(fluxResult)) {
|
if (StringUtil.isNullOrEmpty(fluxResult)) {
|
||||||
toProductImageResult.setStatus("Fail");
|
toProductImageResult.setStatus("Fail");
|
||||||
toProductImageResultMapper.updateById(toProductImageResult);
|
toProductImageResultMapper.updateById(toProductImageResult);
|
||||||
sortRank(toProductImageResult);
|
if (toProductImageResult.getIsLike() != null && toProductImageResult.getIsLike() == 1) {
|
||||||
|
sortRank(toProductImageResult);
|
||||||
|
}
|
||||||
results.add(new MagicToolResultVO(taskId, "Fail"));
|
results.add(new MagicToolResultVO(taskId, "Fail"));
|
||||||
} else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")) {
|
} else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")) {
|
||||||
toProductImageResult.setStatus(fluxResult);
|
toProductImageResult.setStatus(fluxResult);
|
||||||
toProductImageResultMapper.updateById(toProductImageResult);
|
toProductImageResultMapper.updateById(toProductImageResult);
|
||||||
sortRank(toProductImageResult);
|
if (fluxResult.equals("Fail") && toProductImageResult.getIsLike() != null && toProductImageResult.getIsLike() == 1) {
|
||||||
|
sortRank(toProductImageResult);
|
||||||
|
}
|
||||||
results.add(new MagicToolResultVO(taskId, fluxResult));
|
results.add(new MagicToolResultVO(taskId, fluxResult));
|
||||||
} else {
|
} else {
|
||||||
results.add(processFluxResult(fluxResult, toProductImageResult, taskId, toProductImageRecord.getPrompt()));
|
results.add(processFluxResult(fluxResult, toProductImageResult, taskId, toProductImageRecord.getPrompt()));
|
||||||
@@ -2203,10 +2207,14 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
childCollectionQw.lambda().orderByAsc(CollectionSort::getSort);
|
childCollectionQw.lambda().orderByAsc(CollectionSort::getSort);
|
||||||
List<CollectionSort> childSortList = collectionSortMapper.selectList(childCollectionQw);
|
List<CollectionSort> childSortList = collectionSortMapper.selectList(childCollectionQw);
|
||||||
List<AllCollectionVO> childList = new ArrayList<>();
|
List<AllCollectionVO> childList = new ArrayList<>();
|
||||||
|
// 收集需要删除的失败记录ID,用于后续统一清理并重新排序
|
||||||
|
List<Long> failedSortIds = new ArrayList<>();
|
||||||
for (CollectionSort userLikeSort : childSortList) {
|
for (CollectionSort userLikeSort : childSortList) {
|
||||||
if (userLikeSort.getRelationType().equals(CollectionType.TO_PRODUCT_IMAGE.getValue())) {
|
if (userLikeSort.getRelationType().equals(CollectionType.TO_PRODUCT_IMAGE.getValue())) {
|
||||||
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
||||||
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
||||||
|
failedSortIds.add(userLikeSort.getId());
|
||||||
|
log.info("【获取内容】TO_PRODUCT_IMAGE结果失败,relationId={},即将从collection_sort中删除", userLikeSort.getRelationId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
||||||
@@ -2238,6 +2246,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
} else if (userLikeSort.getRelationType().equals(CollectionType.RELIGHT.getValue())) {
|
} else if (userLikeSort.getRelationType().equals(CollectionType.RELIGHT.getValue())) {
|
||||||
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
||||||
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
||||||
|
failedSortIds.add(userLikeSort.getId());
|
||||||
|
log.info("【获取内容】RELIGHT结果失败,relationId={},即将从collection_sort中删除", userLikeSort.getRelationId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
||||||
@@ -2269,6 +2279,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
} else if (userLikeSort.getRelationType().equals(CollectionType.POSE_TRANSFORM.getValue())) {
|
} else if (userLikeSort.getRelationType().equals(CollectionType.POSE_TRANSFORM.getValue())) {
|
||||||
PoseTransformation item = poseTransformationMapper.selectById(userLikeSort.getRelationId());
|
PoseTransformation item = poseTransformationMapper.selectById(userLikeSort.getRelationId());
|
||||||
if (isGenerateTaskFailed(item.getTaskStatus(), item.getCreateTime())) {
|
if (isGenerateTaskFailed(item.getTaskStatus(), item.getCreateTime())) {
|
||||||
|
failedSortIds.add(userLikeSort.getId());
|
||||||
|
log.info("【获取内容】POSE_TRANSFORM结果失败,relationId={},即将从collection_sort中删除", userLikeSort.getRelationId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
PoseTransformationVO poseTransformationVO = new PoseTransformationVO();
|
PoseTransformationVO poseTransformationVO = new PoseTransformationVO();
|
||||||
@@ -2293,6 +2305,114 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
|||||||
childList.add(poseTransformationVO);
|
childList.add(poseTransformationVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 统一处理失败的记录:从collection_sort表中删除失败的记录,并重新排序
|
||||||
|
if (CollectionUtil.isNotEmpty(failedSortIds)) {
|
||||||
|
Long parentId = collectionSort.getId();
|
||||||
|
Long projectId = projectDTO.getId();
|
||||||
|
log.info("【获取内容】检测到{}条失败记录需要清理,parentId={}, projectId={}", failedSortIds.size(), parentId, projectId);
|
||||||
|
for (Long failedSortId : failedSortIds) {
|
||||||
|
CollectionSort failedRecord = collectionSortMapper.selectById(failedSortId);
|
||||||
|
if (failedRecord != null) {
|
||||||
|
String relationType = failedRecord.getRelationType();
|
||||||
|
Long relationId = failedRecord.getRelationId();
|
||||||
|
collectionSortService.deleteCollectionSort(relationId, relationType, projectId, parentId);
|
||||||
|
log.info("【获取内容】已删除失败记录,relationId={}, relationType={}", relationId, relationType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 重新查询子列表,获取更新后的排序
|
||||||
|
childSortList = collectionSortMapper.selectList(childCollectionQw);
|
||||||
|
// 重新构建childList,使用更新后的sort值
|
||||||
|
childList = new ArrayList<>();
|
||||||
|
for (CollectionSort userLikeSort : childSortList) {
|
||||||
|
if (userLikeSort.getRelationType().equals(CollectionType.TO_PRODUCT_IMAGE.getValue())) {
|
||||||
|
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
||||||
|
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
||||||
|
ToProductImageResultVO toProductImageResultVO = CopyUtil.copyObject(toProductImageResult, ToProductImageResultVO.class);
|
||||||
|
|
||||||
|
ToProductImageRecord toProductImageRecord = toProductImageRecordMapper.selectById(toProductImageResult.getToProductImageRecordId());
|
||||||
|
if (Objects.isNull(toProductImageRecord)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
toProductImageResultVO.setPrompt(toProductImageRecord.getPrompt());
|
||||||
|
|
||||||
|
if (toProductImageResultVO.getElementType().equals("ProductElement")) {
|
||||||
|
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(toProductElement.getUrl()));
|
||||||
|
} else if ((toProductImageResultVO.getElementType().equals("DesignOutfit"))) {
|
||||||
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(tDesignPythonOutfit.getDesignUrl()));
|
||||||
|
} else {
|
||||||
|
ToProductImageResult toProductImageResult1 = toProductImageResultMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(toProductImageResult1.getUrl()));
|
||||||
|
}
|
||||||
|
toProductImageResultVO.setCollectionType(CollectionType.TO_PRODUCT_IMAGE.getValue());
|
||||||
|
toProductImageResultVO.setSort(userLikeSort.getSort());
|
||||||
|
toProductImageResultVO.setUserLikeSortId(userLikeSort.getId());
|
||||||
|
toProductImageResultVO.setRelationType(userLikeSort.getRelationType());
|
||||||
|
toProductImageResultVO.setParentId(userLikeSort.getParentId());
|
||||||
|
childList.add(toProductImageResultVO);
|
||||||
|
} else if (userLikeSort.getRelationType().equals(CollectionType.RELIGHT.getValue())) {
|
||||||
|
ToProductImageResult toProductImageResult = toProductImageResultMapper.selectById(userLikeSort.getRelationId());
|
||||||
|
if (isGenerateTaskFailed(toProductImageResult.getStatus(), toProductImageResult.getCreateTime())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
toProductImageResult.setUrl(getMinioUrl(toProductImageResult.getUrl()));
|
||||||
|
ToProductImageResultVO toProductImageResultVO = CopyUtil.copyObject(toProductImageResult, ToProductImageResultVO.class);
|
||||||
|
|
||||||
|
ToProductImageRecord toProductImageRecord = toProductImageRecordMapper.selectById(toProductImageResult.getToProductImageRecordId());
|
||||||
|
if (Objects.isNull(toProductImageRecord)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
toProductImageResultVO.setPrompt(toProductImageRecord.getPrompt());
|
||||||
|
|
||||||
|
if (toProductImageResultVO.getElementType().equals("ProductElement")) {
|
||||||
|
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(toProductElement.getUrl()));
|
||||||
|
} else if ((toProductImageResultVO.getElementType().equals("DesignOutfit"))) {
|
||||||
|
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(tDesignPythonOutfit.getDesignUrl()));
|
||||||
|
} else {
|
||||||
|
ToProductImageResult toProductImageResult1 = toProductImageResultMapper.selectById(toProductImageResultVO.getElementId());
|
||||||
|
toProductImageResultVO.setSourceUrl(getMinioUrl(toProductImageResult1.getUrl()));
|
||||||
|
}
|
||||||
|
toProductImageResultVO.setCollectionType(CollectionType.RELIGHT.getValue());
|
||||||
|
toProductImageResultVO.setSort(userLikeSort.getSort());
|
||||||
|
toProductImageResultVO.setUserLikeSortId(userLikeSort.getId());
|
||||||
|
toProductImageResultVO.setRelationType(userLikeSort.getRelationType());
|
||||||
|
toProductImageResultVO.setParentId(userLikeSort.getParentId());
|
||||||
|
childList.add(toProductImageResultVO);
|
||||||
|
} else if (userLikeSort.getRelationType().equals(CollectionType.POSE_TRANSFORM.getValue())) {
|
||||||
|
PoseTransformation item = poseTransformationMapper.selectById(userLikeSort.getRelationId());
|
||||||
|
if (isGenerateTaskFailed(item.getTaskStatus(), item.getCreateTime())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PoseTransformationVO poseTransformationVO = new PoseTransformationVO();
|
||||||
|
poseTransformationVO.setId(item.getId());
|
||||||
|
poseTransformationVO.setTaskId(item.getUniqueId());
|
||||||
|
poseTransformationVO.setProductImage(getMinioUrl(item.getProductImage()));
|
||||||
|
poseTransformationVO.setLastFrameProductImage(getMinioUrl(item.getLastFrameProductImage()));
|
||||||
|
poseTransformationVO.setPrompt(item.getPrompt());
|
||||||
|
poseTransformationVO.setGifUrl(getMinioUrl(item.getGifUrl()));
|
||||||
|
poseTransformationVO.setVideoUrl(getMinioUrl(item.getVideoUrl()));
|
||||||
|
poseTransformationVO.setFirstFrameUrl(getMinioUrl(item.getFirstFrameUrl()));
|
||||||
|
poseTransformationVO.setIsLiked(item.getIsLiked());
|
||||||
|
poseTransformationVO.setCollectionType(CollectionType.POSE_TRANSFORM.getValue());
|
||||||
|
poseTransformationVO.setSort(userLikeSort.getSort());
|
||||||
|
poseTransformationVO.setUserLikeSortId(userLikeSort.getId());
|
||||||
|
poseTransformationVO.setRelationType(userLikeSort.getRelationType());
|
||||||
|
poseTransformationVO.setResultType(CollectionType.POSE_TRANSFORM.getValue());
|
||||||
|
poseTransformationVO.setParentId(userLikeSort.getParentId());
|
||||||
|
poseTransformationVO.setModelName(item.getModelName());
|
||||||
|
poseTransformationVO.setPoseId(item.getPoseId());
|
||||||
|
poseTransformationVO.setStatus(item.getTaskStatus());
|
||||||
|
childList.add(poseTransformationVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("【获取内容】失败记录清理完成,重新排序后childList.size={}", childList.size());
|
||||||
|
}
|
||||||
o.setChildList(childList);
|
o.setChildList(childList);
|
||||||
|
|
||||||
list.add(o);
|
list.add(o);
|
||||||
|
|||||||
Reference in New Issue
Block a user