From 20000517d391f7791afe9c699c854afcf00dad18 Mon Sep 17 00:00:00 2001 From: "review512jwy@163.com" <“review512jwy@163.com”> Date: Thu, 28 May 2026 10:15:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=A7=A6=E5=8F=91=E5=90=8C?= =?UTF-8?q?=E6=AD=A5salesforce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/controller/CommonController.java | 49 ++++++++++++++++--- .../schedule/ScheduleSyncSalesforceInfo.java | 33 +++++++++++-- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java index cdee061..09e8360 100644 --- a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java +++ b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java @@ -2,12 +2,14 @@ package com.techsor.datacenter.business.controller; import java.util.List; +import com.techsor.datacenter.business.common.response.ResponseCode; import com.techsor.datacenter.business.configurator.interceptor.AccessRequired; import com.techsor.datacenter.business.configurator.interceptor.ApiTokenRequired; import com.techsor.datacenter.business.dto.common.RepostRoidParams; import com.techsor.datacenter.business.dto.common.api.*; import com.techsor.datacenter.business.dto.common.roidproblemreport.ProblemReportsSummariesSearchParams; import com.techsor.datacenter.business.service.ApiAuthService; +import com.techsor.datacenter.business.service.schedule.ScheduleSyncSalesforceInfo; import com.techsor.datacenter.business.util.ApiContext; import com.techsor.datacenter.business.vo.common.ApiTokenVO; import org.slf4j.Logger; @@ -15,13 +17,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSONObject; import com.techsor.datacenter.business.common.response.SimpleDataResponse; @@ -66,6 +62,8 @@ public class CommonController{ private CommonService commonService; @Autowired private ApiAuthService apiAuthService; + @Autowired + private ScheduleSyncSalesforceInfo scheduleSyncSalesforceInfo; @Value("${open.api.mock}") private String openApiMock; @@ -428,4 +426,41 @@ public class CommonController{ @RequestHeader("X-API-KEY") String apiKey) { return apiAuthService.generateToken(apiKey); } + + @Operation(summary = "Manually trigger Salesforce data synchronization for all companies") + @RequestMapping(value = "/syncSalesforce/all", method = RequestMethod.GET) + public SimpleDataResponse syncAll() { + + SimpleDataResponse response = new SimpleDataResponse(); + try { + logger.info("Manual sync triggered"); + scheduleSyncSalesforceInfo.syncAllCompanies(); + response.setCode(ResponseCode.SUCCESS); + response.setMsg("Synchronization started successfully"); + response.setData(null); + } catch (Exception e) { + logger.error("Manual sync failed", e); + response.setCode(ResponseCode.SERVER_ERROR); + response.setMsg("Synchronization failed: " + e.getMessage()); + } + return response; + } + + @Operation(summary = "Manually trigger Salesforce data synchronization for a specific company") + @RequestMapping(value = "/syncSalesforce/{companyId}", method = RequestMethod.GET) + public SimpleDataResponse syncByCompany(@PathVariable Long companyId) { + SimpleDataResponse response = new SimpleDataResponse(); + try { + logger.info("Manual sync triggered for company: {}", companyId); + scheduleSyncSalesforceInfo.syncByCompany(companyId); + response.setCode(ResponseCode.SUCCESS); + response.setMsg("Synchronization started successfully for company: " + companyId); + response.setData(null); + } catch (Exception e) { + logger.error("Manual sync failed for company: {}", companyId, e); + response.setCode(ResponseCode.SERVER_ERROR); + response.setMsg("Synchronization failed: " + e.getMessage()); + } + return response; + } } diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/schedule/ScheduleSyncSalesforceInfo.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/schedule/ScheduleSyncSalesforceInfo.java index e46e01d..2fb86c4 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/schedule/ScheduleSyncSalesforceInfo.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/schedule/ScheduleSyncSalesforceInfo.java @@ -21,6 +21,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; +import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; @@ -64,14 +65,38 @@ public class ScheduleSyncSalesforceInfo { @Scheduled(cron = "0 0 3 ? * SAT") // @Scheduled(cron = "0 * * * * ?") public void start() { + syncAllCompanies(); + } + + @Async("threadPoolTaskExecutor") + public void syncAllCompanies() { + logger.info("Starting async sync for all companies"); List topCompanyIdList = dataSourceInterceptor.getTopCompanyIdList(); for (Long tempTopCompanyId:topCompanyIdList) { - logger.debug("Using dataSourceForCompany_" + tempTopCompanyId); - DataSourceContextHolder.setCurrentDataSourceKey("dataSourceForCompany_" + tempTopCompanyId); - process(tempTopCompanyId); - DataSourceContextHolder.clearCurrentDataSourceKey(); + try { + logger.debug("Using dataSourceForCompany_" + tempTopCompanyId);DataSourceContextHolder.setCurrentDataSourceKey("dataSourceForCompany_" + tempTopCompanyId); + process(tempTopCompanyId); + logger.info("Successfully synced company: {}", tempTopCompanyId); + } catch (Exception e) { + logger.error("Failed to sync company: {}", tempTopCompanyId, e); + } finally { + DataSourceContextHolder.clearCurrentDataSourceKey(); + } } + } + @Async("threadPoolTaskExecutor") + public void syncByCompany(Long companyId) { + logger.info("Starting async sync for company: {}", companyId); + try { + DataSourceContextHolder.setCurrentDataSourceKey("dataSourceForCompany_" + companyId); + process(companyId); + logger.info("Async sync completed successfully for company: {}", companyId); + } catch (Exception e) { + logger.error("Async sync failed for company: {}", companyId, e); + } finally { + DataSourceContextHolder.clearCurrentDataSourceKey(); + } } private void process(Long tempTopCompanyId) {