package com.zy.ai.service.impl; import com.alibaba.fastjson.JSON; import com.zy.ai.entity.AiDataAnalysisReport; import com.zy.ai.entity.AiDataAnalysisUploadLog; import com.zy.ai.service.AiDataAnalysisUploadLogService; import com.zy.ai.service.DataAnalysisUploadService; import com.zy.common.utils.HttpHandler; import com.zy.system.service.ConfigService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @Slf4j @Service("dataAnalysisUploadService") @RequiredArgsConstructor public class DataAnalysisUploadServiceImpl implements DataAnalysisUploadService { private static final String CONFIG_UPLOAD_ENABLED = "aiDataAnalysisUploadEnabled"; private static final String CONFIG_UPLOAD_URL = "aiDataAnalysisUploadUrl"; private final ConfigService configService; private final AiDataAnalysisUploadLogService aiDataAnalysisUploadLogService; @Override public UploadResult upload(AiDataAnalysisReport report) { if (!isUploadEnabled()) { return UploadResult.skipped(); } String url = configService.getConfigValue(CONFIG_UPLOAD_URL, ""); if (url == null || url.trim().isEmpty()) { return UploadResult.skipped(); } Map payload = new LinkedHashMap<>(); payload.put("reportId", report.getId()); payload.put("periodType", report.getPeriodType()); payload.put("periodStart", report.getPeriodStart()); payload.put("periodEnd", report.getPeriodEnd()); payload.put("triggerType", report.getTriggerType()); payload.put("status", report.getStatus()); payload.put("summary", report.getSummary()); payload.put("structuredData", report.getStructuredData()); payload.put("totalTokens", report.getTotalTokens()); payload.put("createTime", report.getCreateTime()); String jsonBody = JSON.toJSONString(payload); AiDataAnalysisUploadLog uploadLog = new AiDataAnalysisUploadLog(); uploadLog.setReportId(report.getId()); uploadLog.setUploadUrl(url); uploadLog.setRequestBody(jsonBody); uploadLog.setCreateTime(new Date()); try { HttpHandler httpHandler = new HttpHandler.Builder() .setUri(url) .setJson(jsonBody) .setTimeout(30, java.util.concurrent.TimeUnit.SECONDS) .build(); String response = httpHandler.doPost(); uploadLog.setHttpStatus(200); uploadLog.setResponseBody(response); uploadLog.setResult("success"); aiDataAnalysisUploadLogService.save(uploadLog); log.info("Data analysis report uploaded, reportId={}, url={}", report.getId(), url); return UploadResult.success(200, response); } catch (Exception e) { log.warn("Failed to upload data analysis report, reportId={}, url={}", report.getId(), url, e); uploadLog.setResult("failed"); uploadLog.setErrorMessage(e.getMessage()); aiDataAnalysisUploadLogService.save(uploadLog); return UploadResult.failed(null, e.getMessage()); } } private boolean isUploadEnabled() { String value = configService.getConfigValue(CONFIG_UPLOAD_ENABLED, "0"); return "1".equals(value.trim()); } }