biz-process 部分类的逻辑转写成java

This commit is contained in:
even 2025-04-15 16:58:52 +08:00
parent a4c12a7f78
commit 0d6ba0ff33
20 changed files with 888 additions and 48 deletions

View File

@ -0,0 +1,17 @@
package cd.casic.ci.common.pipeline.enums;
public enum AuthSystemType {
// v0权限中心
V0_AUTH_TYPE("v0"),
// v3权限中心
V3_AUTH_TYPE("v3"),
// rbac权限中心
RBAC_AUTH_TYPE("rbac");
private String value;
AuthSystemType(String value) {
this.value = value;
}
}

View File

@ -0,0 +1,23 @@
package cd.casic.ci.common.pipeline.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "分页数据包装模型")
public class Pagination<T> {
@Schema(title = "是否有下一页", required = true)
private boolean hasNext;
@Schema(title = "数据", required = true)
private List<T> records;
@Schema(title = "总记录行数", required = false)
private Long count;
}

View File

@ -0,0 +1,62 @@
package cd.casic.ci.common.pipeline.pojo.auth;
import cd.casic.ci.common.pipeline.enums.AuthSystemType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "筛选项目条件实体")
public class ProjectConditionDTO {
@Schema(title = "中心ID")
private Long centerId;
@Schema(title = "部门ID")
private Long deptId;
@Schema(title = "bgId")
private Long bgId;
@Schema(title = "bg列表")
private List<Long> bgIdList;
@Schema(title = "项目创建人")
private String projectCreator;
@Schema(title = "排除项目code")
private List<String> excludedProjectCodes;
@Schema(title = "项目ID列表")
private List<String> projectCodes;
@Schema(title = "资源类型")
private String resourceType;
@Schema(title = "路由tag")
private AuthSystemType routerTag;
@Schema(title = "是否包含router_tag为null")
private Boolean includeNullRouterTag = false;
@Schema(title = "是否关联产品")
private Boolean relatedProduct;
@Schema(title = "排除创建时间大于该值的项目")
private String excludedCreateTime;
@Schema(title = "是否启用")
private Boolean enabled;
@Schema(title = "渠道代码")
private String channelCode;
@Schema(title = "remoteDev相关")
private Boolean queryRemoteDevFlag;
}

View File

@ -1,4 +1,4 @@
package cd.casic.ci.process.process.event.engine.control;
package cd.casic.ci.process.engine.control;
import cd.casic.ci.common.pipeline.Model;
@ -27,9 +27,6 @@ import cd.casic.ci.process.process.service.base.pojo.*;
import cd.casic.ci.process.process.service.base.pojo.constant.CallbackConstants;
import cd.casic.ci.project.service.ServiceAllocIdResource;
import cd.casic.framework.commons.util.watcher.Watcher;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.resilience4j.circuitbreaker.CallNotPermittedException;

View File

@ -0,0 +1,94 @@
package cd.casic.ci.process.process.callback.listener;
import cd.casic.ci.process.engine.control.CallBackControl;
import cd.casic.ci.project.dal.pojo.ProjectCreateInfo;
import cd.casic.ci.project.dal.pojo.ProjectVO;
import cd.casic.ci.project.pojo.ProjectUpdateInfo;
import cd.casic.ci.project.pojo.mq.ProjectBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectCreateBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectEnableStatusBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectUpdateBroadCastEvent;
import cd.casic.ci.project.service.ProjectService;
import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class ProjectCallbackEventListener extends AbstractRedisStreamMessageListener<ProjectBroadCastEvent> {
@Resource
private CallBackControl callBackControl;
private ProjectService projectService;
@Override
public void onMessage(ProjectBroadCastEvent event) {
log.info("Receive ProjectEvent from MQ [$event]");
try {
if (event instanceof ProjectUpdateBroadCastEvent) {
onReceiveProjectUpdate((ProjectUpdateBroadCastEvent)event);
} else if (event instanceof ProjectEnableStatusBroadCastEvent) {
onReceiveProjectEnable((ProjectEnableStatusBroadCastEvent)event);
} else if (event instanceof ProjectCreateBroadCastEvent) {
onReceiveProjectCreate((ProjectCreateBroadCastEvent)event);
}
} catch (Exception e) {
log.error("BKSystemMonitor| project callback listener execute error", e);
}
}
/**
* 处理创建项目事件
* @param event ProjectCreateBroadCastEvent
*/
private void onReceiveProjectCreate(ProjectCreateBroadCastEvent event){
ProjectCreateInfo projectInfo = event.getProjectInfo();
callBackControl.projectCreate(
projectInfo.getEnglishName(),
projectInfo.getProjectName(),
event.getUserId());
}
/**
* 处理更新项目事件
* @param event ProjectUpdateBroadCastEvent
*/
private void onReceiveProjectUpdate(ProjectUpdateBroadCastEvent event){
ProjectUpdateInfo projectInfo = event.getProjectInfo();
callBackControl.projectUpdate(
projectInfo.getEnglishName(),
projectInfo.getProjectName(),
event.getUserId()
);
}
/**
* 处理项目禁用事件
* @param event ProjectEnableStatusBroadCastEvent
*/
private void onReceiveProjectEnable(ProjectEnableStatusBroadCastEvent event){
ProjectVO project = getProject(event.getProjectId());
if (project!=null) {
if (event.getEnable()) {
callBackControl.projectEnable(event.getProjectId(),project.getProjectName(),event.getUserId());
} else {
callBackControl.projectDisable(event.getProjectId(),project.getProjectName(),event.getUserId());
}
}
}
private ProjectVO getProject(String projectEnglishName){
if (StringUtils.isEmpty(projectEnglishName)) {
return null;
}
try {
return projectService.getByEnglishName(projectEnglishName);
} catch (Exception e) {
log.warn(
"fail to get project info|projectEnglishName[$projectEnglishName]",
e
);
return null;
}
}
}

View File

@ -1,43 +0,0 @@
package cd.casic.ci.process.process.event.callback.listener;
import cd.casic.ci.project.pojo.mq.ProjectBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectCreateBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectEnableStatusBroadCastEvent;
import cd.casic.ci.project.pojo.mq.ProjectUpdateBroadCastEvent;
import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class ProjectCallbackEventListener extends AbstractRedisStreamMessageListener<ProjectBroadCastEvent> {
@Override
public void onMessage(ProjectBroadCastEvent message) {
log.info("Receive ProjectEvent from MQ [$event]");
try {
if (message instanceof ProjectUpdateBroadCastEvent) {
} else if (message instanceof ProjectEnableStatusBroadCastEvent) {
} else if (message instanceof ProjectCreateBroadCastEvent) {
}
// when (event) {
// is ProjectUpdateBroadCastEvent -> {
// onReceiveProjectUpdate(event)
// }
//
// is ProjectEnableStatusBroadCastEvent -> {
// onReceiveProjectEnable(event)
// }
//
// is ProjectCreateBroadCastEvent -> {
// onReceiveProjectCreate(event)
// }
// }
} catch (Exception e) {
log.error("BKSystemMonitor| project callback listener execute error", e);
}
}
}

View File

@ -1,4 +1,4 @@
package cd.casic.ci.process.process.dataObject;
package cd.casic.ci.project.dal.dto;
import java.util.Date;

View File

@ -0,0 +1,7 @@
package cd.casic.ci.project.enums;
public enum PluginDetailsDisplayOrder {
LOG,
ARTIFACT,
CONFIG
}

View File

@ -0,0 +1,9 @@
package cd.casic.ci.project.enums;
public enum ProjectCollation {
DEFAULT,
ASC,
DESC;
}

View File

@ -0,0 +1,6 @@
package cd.casic.ci.project.enums;
public enum ProjectSortType {
PROJECT_NAME,
ENGLISH_NAME
}

View File

@ -0,0 +1,46 @@
package cd.casic.ci.project.pojo;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "运营产品")
public class OperationalProductVO {
@Schema(title = "运营产品ID")
@JsonProperty(value = "ProductId", required = false)
private Integer productId;
@Schema(title = "运营产品ID")
@JsonProperty(value = "ProductName", required = false)
private String productName;
@Schema(title = "运营产品ID")
@JsonProperty(value = "PlanProductId", required = false)
private Integer planProductId;
@Schema(title = "规划产品名称")
@JsonProperty(value = "PlanProductName", required = false)
private String planProductName;
@Schema(title = "部门ID")
@JsonProperty(value = "DeptId", required = false)
private String deptId;
@Schema(title = "部门名称")
@JsonProperty(value = "DeptName", required = false)
private String deptName;
@Schema(title = "BgId")
@JsonProperty(value = "BgId", required = false)
private String bgId;
@Schema(title = "Bg名称")
@JsonProperty(value = "BgName", required = false)
private String bgName;
}

View File

@ -0,0 +1,25 @@
package cd.casic.ci.project.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "项目基本信息")
public class ProjectBaseInfo {
@Schema(title = "主键ID")
private Long id;
@Schema(title = "英文缩写")
private String englishName;
@Schema(title = "项目名称")
private String projectName;
@Schema(title = "是否启用")
private Boolean enabled;
}

View File

@ -0,0 +1,31 @@
package cd.casic.ci.project.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "项目--权限")
public class ProjectByConditionDTO {
@Schema(title = "项目名称")
private String projectName;
@Schema(title = "项目英文名称")
private String englishName;
@Schema(title = "权限")
private boolean permission;
@Schema(title = "环境路由")
private String routerTag;
@Schema(title = "bgId")
private Long bgId;
@Schema(title = "remotedev管理员")
private String remotedevManager;
}

View File

@ -0,0 +1,40 @@
package cd.casic.ci.project.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema
public class ProjectCreateUserInfo {
@Schema(title = "操作人")
private String createUserId;
@Schema(title = "待分配的角色名称")
private String roleName;
@Schema(title = "角色Id")
private Integer roleId;
@Schema(title = "组ID")
private Integer groupId;
@Schema(title = "目标用户")
private List<String> userIds = new ArrayList<>();
@Schema(title = "目标部门")
private List<String> deptIds = new ArrayList<>();
@Schema(title = "资源类型")
private String resourceType;
@Schema(title = "资源ID")
private String resourceCode;
}

View File

@ -0,0 +1,12 @@
package cd.casic.ci.project.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectLogo {
private String logoAddr;
}

View File

@ -0,0 +1,40 @@
package cd.casic.ci.project.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "项目组织")
public class ProjectOrganizationInfo {
@Schema(title = "事业群ID")
private Long bgId;
@Schema(title = "事业群名字")
private String bgName;
@Schema(title = "业务线ID")
private Long businessLineId;
@Schema(title = "业务线名称")
private String businessLineName;
@Schema(title = "中心ID")
private Long centerId;
@Schema(title = "中心名称")
private String centerName;
@Schema(title = "部门ID")
private Long deptId;
@Schema(title = "部门名称")
private String deptName;
@Schema(title = "是否需要更正组织")
private boolean needFix = true;
}

View File

@ -0,0 +1,12 @@
package cd.casic.ci.project.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(title = "修改项目创建人")
public class ProjectUpdateCreatorDTO {
@Schema(title = "项目code")
private String projectCode;
@Schema(title = "创建人")
private String creator;
}

View File

@ -0,0 +1,173 @@
package cd.casic.ci.project.pojo.vo;
import cd.casic.ci.project.dal.pojo.SubjectScopeInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = "项目-显示模型")
@SuppressWarnings("ALL")
public class ProjectDiffVO {
@Schema(title = "主键ID")
private Long id;
@Schema(title = "项目ID")
private String projectId;
@Schema(title = "项目名称")
private String projectName;
@Schema(title = "审批中项目名称")
private String afterProjectName;
@Schema(title = "项目代码")
private String projectCode;
@Schema(title = "审批状态")
private Integer approvalStatus;
@Schema(title = "审批时间")
private String approvalTime;
@Schema(title = "审批人")
private String approver;
@Schema(title = "创建时间")
private String createdAt;
@Schema(title = "创建人")
private String creator;
@Schema(title = "事业群ID")
private String bgId;
@Schema(title = "审批中事业群ID")
private String afterBgId;
@Schema(title = "事业群名字")
private String bgName;
@Schema(title = "审批中事业群名字")
private String afterBgName;
@Schema(title = "事业线ID")
private String businessLineId;
@Schema(title = "审批中事业线ID")
private Long afterBusinessLineId;
@Schema(title = "事业线名称")
private String businessLineName;
@Schema(title = "审批中事业线名称")
private String afterBusinessLineName;
@Schema(title = "中心ID")
private String centerId;
@Schema(title = "审批中中心ID")
private String afterCenterId;
@Schema(title = "中心名称")
private String centerName;
@Schema(title = "审批中中心名称")
private String afterCenterName;
@Schema(title = "部门ID")
private String deptId;
@Schema(title = "审批中部门ID")
private String afterDeptId;
@Schema(title = "部门名称")
private String deptName;
@Schema(title = "审批中部门名称")
private String afterDeptName;
@Schema(title = "描述")
private String description;
@Schema(title = "审批中描述")
private String afterDescription;
@Schema(title = "英文缩写")
private String englishName;
@Schema(title = "logo地址")
private String logoAddr;
@Schema(title = "审批中logo地址")
private String afterLogoAddr;
@Schema(title = "评论")
private String remark;
@Schema(title = "修改时间")
private String updatedAt;
@Schema(title = "修改人")
private String updator;
@Schema(title = "项目最大可授权人员范围")
private List<SubjectScopeInfo> subjectScopes;
@Schema(title = "审批中的项目最大可授权人员范围")
private List<SubjectScopeInfo> afterSubjectScopes;
@Schema(title = "项目性质")
private Integer authSecrecy;
@Schema(title = "审批中项目性质")
private Integer afterAuthSecrecy;
@Schema(title = "项目类型")
private Integer projectType;
@Schema(title = "审批中项目类型")
private Integer afterProjectType;
@Schema(title = "运营产品ID")
private Integer productId;
@Schema(title = "审批中运营产品ID")
private Integer afterProductId;
@Schema(title = "运营产品名称")
private String productName;
@Schema(title = "审批中运营产品名称")
private String afterProductName;
@Schema(title = "流水线语言风格")
private String pipelineDialect;
@Schema(title = "审批中流水线语言风格")
private String afterPipelineDialect;
@Schema(title = "是否开启流水线命名提示")
private Boolean enablePipelineNameTips = false;
@Schema(title = "审批中是否开启流水线命名提示")
private Boolean afterEnablePipelineNameTips = false;
@Schema(title = "流水线命名格式")
private String pipelineNameFormat;
@Schema(title = "审批中流水线命名格式")
private String afterPipelineNameFormat;
@Schema(title = "构建日志归档阈值(单位:万)")
private Integer loggingLineLimit;
@Schema(title = "审批中构建日志归档阈值(单位:万)")
private Integer afterLoggingLineLimit;
}

View File

@ -0,0 +1,259 @@
package cd.casic.ci.project.service;
import cd.casic.ci.common.pipeline.pojo.Pagination;
import cd.casic.ci.common.pipeline.pojo.auth.ProjectConditionDTO;
import cd.casic.ci.project.dal.dto.TProjectRecord;
import cd.casic.ci.project.dal.pojo.*;
import cd.casic.ci.project.enums.*;
import cd.casic.ci.project.pojo.*;
import cd.casic.ci.project.pojo.vo.ProjectDiffVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.annotation.Nullable;
import javax.security.auth.AuthPermission;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
@SuppressWarnings("ALL")
public interface ProjectService {
/**
* 校验项目名称/英文名称是否合法
*/
void validate(ProjectValidateType validateType, String name, @Nullable String projectId);
/**
* 创建项目信息
*/
String create(
String userId,
ProjectCreateInfo projectCreateInfo,
@Nullable String accessToken,
ProjectCreateExtInfo createExtInfo,
@Nullable String defaultProjectId,
ProjectChannelCode projectChannel
);
ProjectVO createExtProject(
String userId,
String projectCode,
ProjectCreateInfo projectCreateInfo,
boolean needAuth,
boolean needValidate,
ProjectChannelCode channel
);
/**
* 根据项目ID/英文ID获取项目信息对象
* @param englishName projectCode 英文ID
* @return ProjectVO 如果没有则为null
*/
ProjectVO getByEnglishName(
String userId,
String englishName,
@Nullable String accessToken
);
/**
* 根据项目ID/英文ID获取项目信息对象
* @param englishName projectCode 英文ID
* @return ProjectVO 如果没有则为null
*/
ProjectVO show(
String userId,
String englishName,
@Nullable String accessToken
);
/**
* 根据项目ID/英文ID获取项目审批中对比信息
* @param englishName projectCode 英文ID
* @return ProjectDiffVO 如果没有则为null
*/
ProjectDiffVO diff(String userId, String englishName, @Nullable String accessToken);
/**
* 根据项目ID/英文ID获取项目信息对象
* @param englishName projectCode 英文ID
* @return ProjectVO 如果没有则为null
*/
ProjectVO getByEnglishName(String englishName);
/**
* 修改项目信息 englishName是项目英文名目前平台在api接口上会把他命名成projectId实际上与t_project表中的project_id字段不同
* 后续会统一
*/
boolean update(
String userId,
String englishName,
ProjectUpdateInfo projectUpdateInfo,
@Nullable String accessToken,
@Nullable Boolean needApproval
);
// /**
// * 更新Logo TODO FormDataContentDisposition类是 org.glassfish库的
// 涉及文件上传模块相关内容先空着后续在看具体解决方案
// */
// ProjectLogo updateLogo(
// String userId,
// String englishName,
// InputStream inputStream,
// FormDataContentDisposition disposition,
// @Nullable String accessToken
// );
/**
* 上传Logo
*/
String uploadLogo(
String userId,
InputStream inputStream,
@Nullable String accessToken
);
boolean updateProjectName(String userId, String projectId, String projectName);
/**
* 获取所有项目信息
*/
List<ProjectVO> list(
String userId,
@Nullable String accessToken,
@Nullable Boolean enabled,
boolean unApproved,
@Nullable ProjectSortType sortType,
@Nullable ProjectCollation collation
);
Pagination<ProjectByConditionDTO> listProjectsForApply(
String userId,
@Nullable String accessToken,
@Nullable String projectName,
@Nullable String projectId,
int page,
int pageSize
);
List<ProjectVO> list(String userId);
List<ProjectVO> list(Set<String> projectCodes, @Nullable Boolean enabled);
List<ProjectVO> listOnlyByProjectCode(Set<String> projectCodes);
List<ProjectVO> list(List<String> projectCodes);
Page<ProjectVO> list(int limit, int offset);
Page<ProjectVO> listByChannel(int limit, int offset, List<String> projectChannelCode);
List<ProjectVO> getAllProject();
List<ProjectByConditionDTO> listProjectsByCondition(
ProjectConditionDTO projectConditionDTO,
int limit,
int offset
);
/**
* 获取用户已的可访问项目列表
*/
List<ProjectVO> getProjectByUser(String userName);
HashMap<String, String> getNameByCode(String projectCodes);
void updateUsableStatus(
@Nullable String userId,
String englishName,
boolean enabled,
boolean checkPermission
);
Page<ProjectVO> searchProjectByProjectName(String projectName, int limit, int offset);
boolean hasCreatePermission(String userId);
long getMinId();
long getMaxId();
List<ProjectBaseInfo> getProjectListById(long minId, long maxId);
boolean verifyUserProjectPermission(
String userId,
String projectId,
AuthPermission permission,
@Nullable String accessToken
);
Set<String> listSecrecyProject();
boolean createProjectUser(String projectId, ProjectCreateUserInfo createInfo);
boolean relationIamProject(String projectCode, String relationId);
ProjectVO getProjectByName(String projectName);
boolean updateProjectProperties(@Nullable String userId, String projectCode, ProjectProperties properties);
boolean setDisableWhenInactiveFlag(List<String> projectCodes);
boolean cancelCreateProject(String userId, String projectId);
boolean cancelUpdateProject(String userId, String projectId);
boolean isRbacPermission(String projectId);
boolean updateProjectSubjectScopes(
String projectId,
List<SubjectScopeInfo> subjectScopes
);
boolean updateProjectCreator(List<ProjectUpdateCreatorDTO> projectUpdateCreatorDtoList);
List<OperationalProductVO> getOperationalProducts();
OperationalProductVO getProductByProductId(int productId);
List<OperationalProductVO> getOperationalProductsByBgName(String bgName);
void updateProjectProductId(
String englishName,
@Nullable String productName,
@Nullable Integer productId
);
void updateOrganizationByEnglishName(
String englishName,
ProjectOrganizationInfo projectOrganizationInfo
);
ProjectOrganizationInfo fixProjectOrganization(
TProjectRecord tProjectRecord
);
List<ProjectBaseInfo> getProjectListByProductId(
int productId
);
List<String> getExistedEnglishName(
List<String> englishNameList
);
boolean remindUserOfRelatedProduct(
String userId,
String englishName
);
boolean updatePluginDetailsDisplay(
String englishName,
List<PluginDetailsDisplayOrder> pluginDetailsDisplayOrder
);
String getPipelineDialect(String projectId);
}

View File

@ -0,0 +1,30 @@
package cd.casic.ci.project.service.impl;
import cd.casic.ci.project.service.ServiceAllocIdResource;
import cd.casic.framework.redis.core.RedisTemplateUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ServiceAllocIdResourceImpl implements ServiceAllocIdResource {
RedisTemplateUtils redisTemplateUtils;
@Override
public Long generateSegmentId(String bizTag) {
return redisTemplateUtils.incr(bizTag,1);
}
@Override
public List<Long> batchGenerateSegmentId(String bizTag, Integer number) {
List<Long> idList = new ArrayList<>(number);
// 可以改成批处理
for (int i = 0; i < number; i++) {
long incr = redisTemplateUtils.incr(bizTag, 1);
idList.add(incr);
}
return idList;
}
}