fix(缺陷管理): 对接第三方后同一项目同步多次

--bug=1039294 --user=宋昌昌 【缺陷管理】JIRA/禅道项目管理同步缺陷-修改项目key后全量同步未生效 https://www.tapd.cn/55049933/s/1497744
--bug=1039264 --user=宋昌昌 【缺陷管理】JIRA全量同步-同步到ms缺陷和JIRA平台数据不一致 https://www.tapd.cn/55049933/s/1497344
--bug=1039382 --user=宋昌昌 【项目管理】应用管理-缺陷管理-配置JIRA后,同步缺陷增量频率是1小时,同步失败 https://www.tapd.cn/55049933/s/1497721
This commit is contained in:
song-cc-rock 2024-04-15 20:58:30 +08:00 committed by Craftsman
parent 53f2c736f7
commit fb47a28bc9
2 changed files with 31 additions and 16 deletions

View File

@ -1,5 +1,6 @@
package io.metersphere.bug.job; package io.metersphere.bug.job;
import io.metersphere.bug.service.BugSyncExtraService;
import io.metersphere.bug.service.BugSyncService; import io.metersphere.bug.service.BugSyncService;
import io.metersphere.bug.service.XpackBugService; import io.metersphere.bug.service.XpackBugService;
import io.metersphere.project.service.ProjectApplicationService; import io.metersphere.project.service.ProjectApplicationService;
@ -23,12 +24,14 @@ public class BugSyncJob extends BaseScheduleJob {
private final LicenseService licenseService; private final LicenseService licenseService;
private final BugSyncService bugSyncService; private final BugSyncService bugSyncService;
private final XpackBugService xpackBugService; private final XpackBugService xpackBugService;
private final BugSyncExtraService bugSyncExtraService;
private final ProjectApplicationService projectApplicationService; private final ProjectApplicationService projectApplicationService;
public BugSyncJob() { public BugSyncJob() {
licenseService = CommonBeanFactory.getBean(LicenseService.class); licenseService = CommonBeanFactory.getBean(LicenseService.class);
xpackBugService = CommonBeanFactory.getBean(XpackBugService.class); xpackBugService = CommonBeanFactory.getBean(XpackBugService.class);
bugSyncService = CommonBeanFactory.getBean(BugSyncService.class); bugSyncService = CommonBeanFactory.getBean(BugSyncService.class);
bugSyncExtraService = CommonBeanFactory.getBean(BugSyncExtraService.class);
projectApplicationService = CommonBeanFactory.getBean(ProjectApplicationService.class); projectApplicationService = CommonBeanFactory.getBean(ProjectApplicationService.class);
} }
@ -49,19 +52,31 @@ public class BugSyncJob extends BaseScheduleJob {
return; return;
} }
LogUtils.info("bug sync job start......"); LogUtils.info("bug sync job start......");
if (licenseService == null) { // 获取当前项目同步缺陷唯一Key
LogUtils.info("license is null, sync remain bug"); try{
bugSyncService.syncPlatformBugBySchedule(resourceId, userId); String syncValue = bugSyncExtraService.getSyncKey(resourceId);
} else { if (StringUtils.isEmpty(syncValue)) {
LicenseDTO licenseDTO = licenseService.validate(); // 不存在, 设置保证唯一性, 并开始同步
if (licenseDTO != null && licenseDTO.getLicense() != null bugSyncExtraService.setSyncKey(resourceId);
&& StringUtils.equals(licenseDTO.getStatus(), "valid")) { if (licenseService == null) {
LogUtils.info("license is valid, sync all bug"); LogUtils.info("license is null, sync remain bug");
xpackBugService.syncPlatformBugsBySchedule(resourceId, userId); bugSyncService.syncPlatformBugBySchedule(resourceId, userId);
} else { } else {
LogUtils.info("license is invalid, sync remain bug"); LicenseDTO licenseDTO = licenseService.validate();
bugSyncService.syncPlatformBugBySchedule(resourceId, userId); if (licenseDTO != null && licenseDTO.getLicense() != null
&& StringUtils.equals(licenseDTO.getStatus(), "valid")) {
LogUtils.info("license is valid, sync all bug");
xpackBugService.syncPlatformBugsBySchedule(resourceId, userId);
} else {
LogUtils.info("license is invalid, sync remain bug");
bugSyncService.syncPlatformBugBySchedule(resourceId, userId);
}
}
bugSyncExtraService.deleteSyncKey(resourceId);
} }
} catch (Exception e) {
bugSyncExtraService.deleteSyncKey(resourceId);
LogUtils.error(e.getMessage());
} }
LogUtils.info("bug sync job end......"); LogUtils.info("bug sync job end......");
} }

View File

@ -15,7 +15,7 @@ public class BugSyncExtraService {
@Resource @Resource
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
private static final String SYNC_THIRD_PARTY_ISSUES_KEY = "MS:BUG:SYNC"; private static final String SYNC_THIRD_PARTY_BUG_KEY = "MS:BUG:SYNC";
private static final String SYNC_THIRD_PARTY_ISSUES_ERROR_KEY = "MS:BUG:SYNC:ERROR"; private static final String SYNC_THIRD_PARTY_ISSUES_ERROR_KEY = "MS:BUG:SYNC:ERROR";
/** /**
@ -23,7 +23,7 @@ public class BugSyncExtraService {
* @param projectId 项目ID * @param projectId 项目ID
*/ */
public void setSyncKey(String projectId) { public void setSyncKey(String projectId) {
stringRedisTemplate.opsForValue().set(SYNC_THIRD_PARTY_ISSUES_KEY + ":" + projectId, UUID.randomUUID().toString(), 60 * 10L, TimeUnit.SECONDS); stringRedisTemplate.opsForValue().set(SYNC_THIRD_PARTY_BUG_KEY + ":" + projectId, UUID.randomUUID().toString(), 60 * 10L, TimeUnit.SECONDS);
} }
/** /**
@ -31,7 +31,7 @@ public class BugSyncExtraService {
* @param projectId 项目ID * @param projectId 项目ID
*/ */
public String getSyncKey(String projectId) { public String getSyncKey(String projectId) {
return stringRedisTemplate.opsForValue().get(SYNC_THIRD_PARTY_ISSUES_KEY + ":" + projectId); return stringRedisTemplate.opsForValue().get(SYNC_THIRD_PARTY_BUG_KEY + ":" + projectId);
} }
/** /**
@ -39,7 +39,7 @@ public class BugSyncExtraService {
* @param projectId 项目ID * @param projectId 项目ID
*/ */
public void deleteSyncKey(String projectId) { public void deleteSyncKey(String projectId) {
stringRedisTemplate.delete(SYNC_THIRD_PARTY_ISSUES_KEY + ":" + projectId); stringRedisTemplate.delete(SYNC_THIRD_PARTY_BUG_KEY + ":" + projectId);
} }
/** /**