大声道撒旦

This commit is contained in:
dengqichen 2024-12-30 11:10:13 +08:00
parent 426297ebbc
commit 05cc791af5
13 changed files with 192 additions and 33 deletions

View File

@ -0,0 +1,28 @@
package com.qqchen.deploy.backend.deploy.api;
import com.qqchen.deploy.backend.framework.controller.BaseController;
import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory;
import com.qqchen.deploy.backend.deploy.dto.JenkinsSyncHistoryDTO;
import com.qqchen.deploy.backend.deploy.query.JenkinsSyncHistoryQuery;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Jenkin同步日志 Controller
*/
@Slf4j
@RestController
@RequestMapping("/api/v1//api/v1/jenkins-sync-history")
@Tag(name = "Jenkin同步日志管理", description = "Jenkin同步日志管理相关接口")
public class JenkinsSyncHistoryApiController extends BaseController<JenkinsSyncHistory, JenkinsSyncHistoryDTO, Long, JenkinsSyncHistoryQuery> {
@Override
protected void exportData(HttpServletResponse response, List<JenkinsSyncHistoryDTO> data) {
// TODO: 实现导出逻辑
log.info("导出Jenkin同步日志数据数据量{}", data.size());
}
}

View File

@ -0,0 +1,13 @@
package com.qqchen.deploy.backend.deploy.converter;
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory;
import com.qqchen.deploy.backend.deploy.dto.JenkinsSyncHistoryDTO;
import org.mapstruct.Mapper;
/**
* Jenkin同步日志 Converter
*/
@Mapper(config = BaseConverter.class)
public interface JenkinsSyncHistoryConverter extends BaseConverter<JenkinsSyncHistory, JenkinsSyncHistoryDTO> {
}

View File

@ -0,0 +1,31 @@
package com.qqchen.deploy.backend.deploy.dto;
import com.qqchen.deploy.backend.deploy.enums.ExternalSystemSyncStatus;
import com.qqchen.deploy.backend.deploy.enums.JenkinsSyncType;
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import jakarta.persistence.Column;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* Jenkin同步日志 DTO
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class JenkinsSyncHistoryDTO extends BaseDTO {
private String number;
private LocalDateTime endTime;
private String errorMessage;
private ExternalSystemSyncStatus status;
private JenkinsSyncType syncType;
private Long externalSystemId;
}

View File

@ -19,25 +19,28 @@ import java.time.LocalDateTime;
@Table(name = "deploy_jenkins_sync_history") @Table(name = "deploy_jenkins_sync_history")
@LogicDelete @LogicDelete
public class JenkinsSyncHistory extends Entity<Long> { public class JenkinsSyncHistory extends Entity<Long> {
@Column(name = "external_system_id", nullable = false) @Column(name = "sync_history_number", nullable = false)
private Long external_system_id; private String number;
@Column(name = "sync_type", nullable = false) @Column(name = "sync_type", nullable = false)
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private JenkinsSyncType syncType; private JenkinsSyncType syncType;
@Column(nullable = false) @Column(nullable = false)
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private ExternalSystemSyncStatus status; private ExternalSystemSyncStatus status;
@Column(name = "start_time", nullable = false) @Column(name = "start_time", nullable = false)
private LocalDateTime startTime; private LocalDateTime startTime;
@Column(name = "end_time") @Column(name = "end_time")
private LocalDateTime endTime; private LocalDateTime endTime;
@Column(name = "error_message", columnDefinition = "TEXT") @Column(name = "error_message", columnDefinition = "TEXT")
private String errorMessage; private String errorMessage;
@Column(name = "external_system_id", nullable = false)
private Long external_system_id;
} }

View File

@ -1,7 +1,11 @@
package com.qqchen.deploy.backend.deploy.enums; package com.qqchen.deploy.backend.deploy.enums;
public enum ExternalSystemSyncStatus { public enum ExternalSystemSyncStatus {
SUCCESS, // 同步成功 SUCCESS, // 同步成功
FAILED, // 同步失败 FAILED, // 同步失败
RUNNING // 同步中 RUNNING // 同步中
} }

View File

@ -1,8 +1,7 @@
package com.qqchen.deploy.backend.deploy.enums; package com.qqchen.deploy.backend.deploy.enums;
public enum JenkinsSyncType { public enum JenkinsSyncType {
ALL, // 全量同步 VIEW, // 同步视图
VIEW, // 同步视图 JOB, // 同步作业
JOB, // 同步作业 BUILD // 同步构建记录
BUILD // 同步构建记录 }
}

View File

@ -0,0 +1,38 @@
package com.qqchen.deploy.backend.deploy.query;
import com.qqchen.deploy.backend.deploy.enums.ExternalSystemSyncStatus;
import com.qqchen.deploy.backend.deploy.enums.JenkinsSyncType;
import com.qqchen.deploy.backend.framework.annotation.QueryField;
import com.qqchen.deploy.backend.framework.enums.QueryType;
import com.qqchen.deploy.backend.framework.query.BaseQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* Jenkin同步日志查询对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class JenkinsSyncHistoryQuery extends BaseQuery {
@QueryField(field = "end_time")
private LocalDateTime endTime;
@QueryField(field = "error_message", type = QueryType.LIKE)
private String errorMessage;
@QueryField(field = "external_system_id")
private Long externalSystemId;
@QueryField(field = "start_time")
private LocalDateTime startTime;
@QueryField(field = "status", type = QueryType.LIKE)
private ExternalSystemSyncStatus status;
@QueryField(field = "sync_type", type = QueryType.LIKE)
private JenkinsSyncType syncType;
}

View File

@ -1,12 +1,13 @@
package com.qqchen.deploy.backend.deploy.repository; package com.qqchen.deploy.backend.deploy.repository;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository; import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory; import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; /**
* Jenkin同步日志 Repository
*/
@Repository @Repository
public interface IJenkinsSyncHistoryRepository extends IBaseRepository<JenkinsSyncHistory, Long> { public interface IJenkinsSyncHistoryRepository extends IBaseRepository<JenkinsSyncHistory, Long> {
List<JenkinsSyncHistory> findTop50ByOrderByStartTimeDesc(); JenkinsSyncHistory findByNumber(String number);
} }

View File

@ -0,0 +1,18 @@
package com.qqchen.deploy.backend.deploy.service;
import com.qqchen.deploy.backend.deploy.enums.ExternalSystemSyncStatus;
import com.qqchen.deploy.backend.deploy.enums.JenkinsSyncType;
import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory;
import com.qqchen.deploy.backend.deploy.dto.JenkinsSyncHistoryDTO;
import com.qqchen.deploy.backend.deploy.query.JenkinsSyncHistoryQuery;
/**
* Jenkin同步日志 Service接口
*/
public interface IJenkinsSyncHistoryService extends IBaseService<JenkinsSyncHistory, JenkinsSyncHistoryDTO, JenkinsSyncHistoryQuery, Long> {
void saveOrUpdateHistory(JenkinsSyncHistoryDTO syncHistory);
}

View File

@ -0,0 +1,32 @@
package com.qqchen.deploy.backend.deploy.service.impl;
import com.qqchen.deploy.backend.deploy.enums.ExternalSystemSyncStatus;
import com.qqchen.deploy.backend.deploy.enums.JenkinsSyncType;
import com.qqchen.deploy.backend.deploy.repository.IJenkinsSyncHistoryRepository;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import com.qqchen.deploy.backend.deploy.entity.JenkinsSyncHistory;
import com.qqchen.deploy.backend.deploy.dto.JenkinsSyncHistoryDTO;
import com.qqchen.deploy.backend.deploy.query.JenkinsSyncHistoryQuery;
import com.qqchen.deploy.backend.deploy.service.IJenkinsSyncHistoryService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
/**
* Jenkin同步日志 Service实现
*/
@Slf4j
@Service
public class JenkinsSyncHistoryServiceImpl extends BaseServiceImpl<JenkinsSyncHistory, JenkinsSyncHistoryDTO, JenkinsSyncHistoryQuery, Long> implements IJenkinsSyncHistoryService {
@Resource
private IJenkinsSyncHistoryRepository jenkinsSyncHistoryRepository;
@Override
public void saveOrUpdateHistory(JenkinsSyncHistoryDTO syncHistory) {
jenkinsSyncHistoryRepository.save(super.converter.toEntity(syncHistory));
}
}

View File

@ -8,6 +8,7 @@ import com.qqchen.deploy.backend.deploy.query.JenkinsViewQuery;
import com.qqchen.deploy.backend.deploy.integration.IJenkinsServiceIntegration; import com.qqchen.deploy.backend.deploy.integration.IJenkinsServiceIntegration;
import com.qqchen.deploy.backend.deploy.integration.response.JenkinsViewResponse; import com.qqchen.deploy.backend.deploy.integration.response.JenkinsViewResponse;
import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository; import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository;
import com.qqchen.deploy.backend.deploy.repository.IJenkinsSyncHistoryRepository;
import com.qqchen.deploy.backend.deploy.repository.IJenkinsViewRepository; import com.qqchen.deploy.backend.deploy.repository.IJenkinsViewRepository;
import com.qqchen.deploy.backend.deploy.service.IJenkinsViewService; import com.qqchen.deploy.backend.deploy.service.IJenkinsViewService;
import com.qqchen.deploy.backend.framework.enums.ResponseCode; import com.qqchen.deploy.backend.framework.enums.ResponseCode;
@ -42,6 +43,9 @@ public class JenkinsViewServiceImpl extends BaseServiceImpl<JenkinsView, Jenkins
@Resource @Resource
private JenkinsViewConverter jenkinsViewConverter; private JenkinsViewConverter jenkinsViewConverter;
@Resource
private IJenkinsSyncHistoryRepository jenkinsSyncHistoryRepository;
/** /**
* 同步Jenkins视图 * 同步Jenkins视图
* *
@ -52,8 +56,7 @@ public class JenkinsViewServiceImpl extends BaseServiceImpl<JenkinsView, Jenkins
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer syncViews(Long externalSystemId) { public Integer syncViews(Long externalSystemId) {
// 1. 查询外部系统 // 1. 查询外部系统
ExternalSystem externalSystem = externalSystemRepository.findById(externalSystemId) ExternalSystem externalSystem = externalSystemRepository.findById(externalSystemId).orElseThrow(() -> new BusinessException(ResponseCode.EXTERNAL_SYSTEM_NOT_FOUND));
.orElseThrow(() -> new BusinessException(ResponseCode.EXTERNAL_SYSTEM_NOT_FOUND));
// 2. 调用Jenkins API获取视图列表 // 2. 调用Jenkins API获取视图列表
List<JenkinsViewResponse> viewResponses = jenkinsServiceIntegration.listViews(externalSystem); List<JenkinsViewResponse> viewResponses = jenkinsServiceIntegration.listViews(externalSystem);
@ -88,9 +91,7 @@ public class JenkinsViewServiceImpl extends BaseServiceImpl<JenkinsView, Jenkins
// 4. 批量保存或更新 // 4. 批量保存或更新
jenkinsViewRepository.saveAll(jenkinsViews); jenkinsViewRepository.saveAll(jenkinsViews);
log.info("Successfully synchronized {} Jenkins views for external system: {}", jenkinsViews.size(), externalSystemId);
log.info("Successfully synchronized {} Jenkins views for external system: {}",
jenkinsViews.size(), externalSystemId);
return jenkinsViews.size(); return jenkinsViews.size();
} }

View File

@ -552,21 +552,13 @@ CREATE TABLE deploy_project_group
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除', deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除',
-- 业务字段 -- 业务字段
tenant_code BIGINT DEFAULT NULL COMMENT '租户CODE', tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户CODE',
type VARCHAR(50) NULL COMMENT '项目组类型', type VARCHAR(50) NULL COMMENT '项目组类型',
project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码', project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码',
project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称', project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称',
project_group_desc VARCHAR(255) NULL COMMENT '项目组描述', project_group_desc VARCHAR(255) NULL COMMENT '项目组描述',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用', enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
sort INT NOT NULL DEFAULT 0 COMMENT '排序号', sort INT NOT NULL DEFAULT 0 COMMENT '排序号'
-- 索引
INDEX idx_tenant_id (tenant_code) COMMENT '租户ID索引',
UNIQUE INDEX uk_project_group_code (tenant_code, project_group_code) COMMENT '租户下项目组编码唯一',
-- 外键约束
CONSTRAINT fk_project_tenant FOREIGN KEY (tenant_code)
REFERENCES sys_tenant (id)
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='项目组表'; COLLATE = utf8mb4_unicode_ci COMMENT ='项目组表';