fix(file): 解决文件下载和时间戳处理问题
- 实现文件名扩展名推断逻辑,从URL路径自动提取并添加扩展名 - 添加下载错误处理和日志记录功能 - 在下载失败时显示错误通知而非成功通知 - 将服务器时间戳处理统一调整为CST(亚洲/上海)时区 - 更新sdk-core版本号至1.1.6-SNAPSHOT
这个提交包含在:
父节点
45ea8060b9
当前提交
028ebf4222
@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ import java.util.*;
|
|||||||
public class LogService {
|
public class LogService {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(LogService.class);
|
private static final Logger log = LoggerFactory.getLogger(LogService.class);
|
||||||
|
private static final ZoneId CST = ZoneId.of("Asia/Shanghai");
|
||||||
|
|
||||||
private final LogIssueRepository issueRepository;
|
private final LogIssueRepository issueRepository;
|
||||||
private final LogIssueEventRepository issueEventRepository;
|
private final LogIssueEventRepository issueEventRepository;
|
||||||
@ -71,9 +73,9 @@ public class LogService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now(CST);
|
||||||
LocalDateTime eventTime = item.timestamp() > 0
|
LocalDateTime eventTime = item.timestamp() > 0
|
||||||
? Instant.ofEpochMilli(item.timestamp()).atZone(ZoneOffset.UTC).toLocalDateTime()
|
? Instant.ofEpochMilli(item.timestamp()).atZone(CST).toLocalDateTime()
|
||||||
: now;
|
: now;
|
||||||
|
|
||||||
String exType = item.exception() != null ? item.exception().type() : "";
|
String exType = item.exception() != null ? item.exception().type() : "";
|
||||||
@ -261,8 +263,8 @@ public class LogService {
|
|||||||
entity.setSdkVersion(item.sdk() != null ? item.sdk().version() : null);
|
entity.setSdkVersion(item.sdk() != null ? item.sdk().version() : null);
|
||||||
entity.setCreatedAt(
|
entity.setCreatedAt(
|
||||||
item.timestamp() > 0
|
item.timestamp() > 0
|
||||||
? Instant.ofEpochMilli(item.timestamp()).atZone(ZoneOffset.UTC).toLocalDateTime()
|
? Instant.ofEpochMilli(item.timestamp()).atZone(CST).toLocalDateTime()
|
||||||
: LocalDateTime.now()
|
: LocalDateTime.now(CST)
|
||||||
);
|
);
|
||||||
eventRepository.save(entity);
|
eventRepository.save(entity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -399,8 +401,8 @@ public class LogService {
|
|||||||
public Page<IssueEventResponse> queryEvents(String appKey, String name, String userId,
|
public Page<IssueEventResponse> queryEvents(String appKey, String name, String userId,
|
||||||
String from, String to, int page, int size) {
|
String from, String to, int page, int size) {
|
||||||
LocalDateTime fromDate = parseDate(from);
|
LocalDateTime fromDate = parseDate(from);
|
||||||
LocalDateTime toDate = parseDate(to) != null ? parseDate(to).plusDays(1) : LocalDateTime.now();
|
LocalDateTime toDate = parseDate(to) != null ? parseDate(to).plusDays(1) : LocalDateTime.now(CST);
|
||||||
if (fromDate == null) fromDate = LocalDateTime.now().minusDays(7);
|
if (fromDate == null) fromDate = LocalDateTime.now(CST).minusDays(7);
|
||||||
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
|
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "createdAt"));
|
||||||
Page<LogEventEntity> result;
|
Page<LogEventEntity> result;
|
||||||
if (name != null && userId != null) {
|
if (name != null && userId != null) {
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -85,7 +86,7 @@ public class SourcemapService {
|
|||||||
if (existing.isPresent()) {
|
if (existing.isPresent()) {
|
||||||
entity = existing.get();
|
entity = existing.get();
|
||||||
entity.setStorageKey(filePath.toString());
|
entity.setStorageKey(filePath.toString());
|
||||||
entity.setUploadedAt(LocalDateTime.now());
|
entity.setUploadedAt(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
|
||||||
} else {
|
} else {
|
||||||
entity = newEntity(appKey, platform, appVersion, buildId, bundleName, filePath.toString());
|
entity = newEntity(appKey, platform, appVersion, buildId, bundleName, filePath.toString());
|
||||||
}
|
}
|
||||||
@ -96,7 +97,7 @@ public class SourcemapService {
|
|||||||
if (existing.isPresent()) {
|
if (existing.isPresent()) {
|
||||||
entity = existing.get();
|
entity = existing.get();
|
||||||
entity.setStorageKey(filePath.toString());
|
entity.setStorageKey(filePath.toString());
|
||||||
entity.setUploadedAt(LocalDateTime.now());
|
entity.setUploadedAt(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
|
||||||
} else {
|
} else {
|
||||||
entity = newEntity(appKey, platform, appVersion, null, bundleName, filePath.toString());
|
entity = newEntity(appKey, platform, appVersion, null, bundleName, filePath.toString());
|
||||||
}
|
}
|
||||||
@ -123,7 +124,7 @@ public class SourcemapService {
|
|||||||
e.setBuildId(buildId);
|
e.setBuildId(buildId);
|
||||||
e.setBundleName(bundleName);
|
e.setBundleName(bundleName);
|
||||||
e.setStorageKey(storageKey);
|
e.setStorageKey(storageKey);
|
||||||
e.setUploadedAt(LocalDateTime.now());
|
e.setUploadedAt(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import java.net.http.HttpResponse;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.HexFormat;
|
import java.util.HexFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -184,7 +185,7 @@ public class WebhookService {
|
|||||||
entity.setCooldownSec(request.cooldownSec() > 0 ? request.cooldownSec() : 3600);
|
entity.setCooldownSec(request.cooldownSec() > 0 ? request.cooldownSec() : 3600);
|
||||||
entity.setSecret(request.secret());
|
entity.setSecret(request.secret());
|
||||||
entity.setEnabled(true);
|
entity.setEnabled(true);
|
||||||
entity.setCreatedAt(LocalDateTime.now());
|
entity.setCreatedAt(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
|
||||||
try {
|
try {
|
||||||
entity.setEvents(objectMapper.writeValueAsString(request.events()));
|
entity.setEvents(objectMapper.writeValueAsString(request.events()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@ -36,7 +36,7 @@ spring:
|
|||||||
max-idle: 8
|
max-idle: 8
|
||||||
max-active: 8
|
max-active: 8
|
||||||
jackson:
|
jackson:
|
||||||
time-zone: UTC
|
time-zone: Asia/Shanghai
|
||||||
serialization:
|
serialization:
|
||||||
write-dates-as-timestamps: false
|
write-dates-as-timestamps: false
|
||||||
flyway:
|
flyway:
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户