Compare commits

..

No commits in common. "ead82b946d597f6d8e38915e881f31f5a61eddce" and "952d863a611e4cc6b51aac766981f3b38fbb521d" have entirely different histories.

19 changed files with 50 additions and 176 deletions

View File

@ -73,7 +73,7 @@ public class OpsTenantAutoConfiguration {
// ========== Security ========== // ========== Security ==========
// @Bean @Bean
public FilterRegistrationBean<TenantSecurityWebFilter> tenantSecurityWebFilter(TenantProperties tenantProperties, public FilterRegistrationBean<TenantSecurityWebFilter> tenantSecurityWebFilter(TenantProperties tenantProperties,
WebProperties webProperties, WebProperties webProperties,
GlobalExceptionHandler globalExceptionHandler, GlobalExceptionHandler globalExceptionHandler,

View File

@ -13,7 +13,7 @@ public class ExecutorConfig {
@Bean("parallelExecutor") @Bean("parallelExecutor")
public ThreadPoolTaskExecutor pipelineExecutor() { public ThreadPoolTaskExecutor pipelineExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); executor.setCorePoolSize(5);
executor.setMaxPoolSize(10); executor.setMaxPoolSize(10);
executor.setQueueCapacity(100); executor.setQueueCapacity(100);
executor.setThreadNamePrefix("Parallel-"); executor.setThreadNamePrefix("Parallel-");
@ -25,7 +25,7 @@ public class ExecutorConfig {
@Bean("serialExecutor") @Bean("serialExecutor")
public ThreadPoolTaskExecutor serialExecutor() { public ThreadPoolTaskExecutor serialExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); executor.setCorePoolSize(5);
executor.setMaxPoolSize(10); executor.setMaxPoolSize(10);
executor.setQueueCapacity(100); executor.setQueueCapacity(100);
executor.setThreadNamePrefix("Serial-"); executor.setThreadNamePrefix("Serial-");
@ -37,7 +37,7 @@ public class ExecutorConfig {
@Bean("workerExecutor") @Bean("workerExecutor")
public ThreadPoolTaskExecutor workerExecutor() { public ThreadPoolTaskExecutor workerExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); executor.setCorePoolSize(5);
executor.setMaxPoolSize(10); executor.setMaxPoolSize(10);
executor.setQueueCapacity(100); executor.setQueueCapacity(100);
executor.setThreadNamePrefix("Worker-"); executor.setThreadNamePrefix("Worker-");

View File

@ -2,7 +2,6 @@ package cd.casic.ci.process.engine.dispatcher;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement; import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.extern.slf4j.Slf4j;
import java.util.List; import java.util.List;

View File

@ -8,7 +8,6 @@ import cd.casic.ci.process.engine.runContext.SecondStageRunContext;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement; import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.stage.PipStage;
import cd.casic.framework.mq.redis.core.RedisMQTemplate; import cd.casic.framework.mq.redis.core.RedisMQTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -20,7 +19,7 @@ import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
@Slf4j
public class ParallelDispatcher implements BaseDispatcher{ public class ParallelDispatcher implements BaseDispatcher{
private List<PipStage> firstStageList; private List<PipStage> firstStageList;
@ -35,6 +34,7 @@ public class ParallelDispatcher implements BaseDispatcher{
this.pipelineRunContext = context; this.pipelineRunContext = context;
this.stageIndex = 0; this.stageIndex = 0;
this.runContextManager = contextManager; this.runContextManager = contextManager;
contextManager.contextRegister(context);
this.redisMQTemplate = redisMQTemplate; this.redisMQTemplate = redisMQTemplate;
this.taskExecutor = taskExecutor; this.taskExecutor = taskExecutor;
} }
@ -59,16 +59,7 @@ public class ParallelDispatcher implements BaseDispatcher{
} }
// 等待当前阶段执行 // 等待当前阶段执行
latch.await(); latch.await();
if (pipelineRunContext.getState().get()== ContextStateEnum.BAD_ENDING.getCode()) {
log.error("并行执行停止");
break;
}
// TODO 检查是否全部执行成功 目前没有逻辑就是忽略错误 // TODO 检查是否全部执行成功 目前没有逻辑就是忽略错误
// 当前执行失败
// while (pipelineRunContext.getState().get() != ContextStateEnum.RUNNING.getCode()) {
// // 想办法借助工具类 或者直接wait
// pipelineRunContext.pause();
// }
} }
} }
@Override @Override

View File

@ -11,13 +11,12 @@ import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.stage.PipStage;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.framework.mq.redis.core.RedisMQTemplate; import cd.casic.framework.mq.redis.core.RedisMQTemplate;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
public class SerialDispatcher implements BaseDispatcher { public class SerialDispatcher implements BaseDispatcher {
private SecondStageRunContext stageRunContext; private SecondStageRunContext stageRunContext;
private List<PipTask> taskList; private List<PipTask> taskList;
@ -48,20 +47,13 @@ public class SerialDispatcher implements BaseDispatcher {
TaskRunMessage taskRunMessage = new TaskRunMessage(pipTask); TaskRunMessage taskRunMessage = new TaskRunMessage(pipTask);
redisMQTemplate.send(taskRunMessage); redisMQTemplate.send(taskRunMessage);
// TODO 监听当前taskContext状态变成执行成功或者执行失败(worker当中改变状态为运行中执行成功执行失败) // TODO 监听当前taskContext状态变成执行成功或者执行失败(worker当中改变状态为运行中执行成功执行失败)
//
AtomicInteger state = taskRunContext.getState(); AtomicInteger state = taskRunContext.getState();
// 如果不为正常执行成功就暂时阻塞直到有状态更改
while (state.get() != ContextStateEnum.HAPPY_ENDING.getCode() while (state.get() != ContextStateEnum.HAPPY_ENDING.getCode()
&& state.get() != ContextStateEnum.BAD_ENDING.getCode() && state.get() != ContextStateEnum.BAD_ENDING.getCode()) {
) { Thread.sleep(1000L);
// Thread.sleep(1000L);
taskRunContext.pause();
} }
// //
if (state.get()== ContextStateEnum.BAD_ENDING.getCode()) {
log.error("串行执行停止");
break;
}
} }
} }

View File

@ -61,7 +61,6 @@ public class DefaultPipelineExecutor implements PipelineExecutor {
} }
// 如果要做 容灾就需要重新将数据库存的记录按顺序加载入 // 如果要做 容灾就需要重新将数据库存的记录按顺序加载入
PipelineRunContext pipelineRunContext = new PipelineRunContext(pipeline,childCount,null,new ConcurrentHashMap<>(),new ConcurrentHashMap<>()); PipelineRunContext pipelineRunContext = new PipelineRunContext(pipeline,childCount,null,new ConcurrentHashMap<>(),new ConcurrentHashMap<>());
runContextManager.contextRegister(pipelineRunContext);
ParallelDispatcher parallelDispatcher = new ParallelDispatcher(mainStage,pipelineRunContext,runContextManager,redisMQTemplate,serialExecutor); ParallelDispatcher parallelDispatcher = new ParallelDispatcher(mainStage,pipelineRunContext,runContextManager,redisMQTemplate,serialExecutor);
parallelExecutor.execute(parallelDispatcher); parallelExecutor.execute(parallelDispatcher);
return pipelineRunContext; return pipelineRunContext;

View File

@ -1,6 +1,5 @@
package cd.casic.ci.process.engine.manager.impl; package cd.casic.ci.process.engine.manager.impl;
import cd.casic.ci.process.engine.enums.ContextStateEnum;
import cd.casic.ci.process.engine.manager.RunContextManager; import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.engine.runContext.PipelineRunContext; import cd.casic.ci.process.engine.runContext.PipelineRunContext;
@ -11,7 +10,6 @@ import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -53,10 +51,6 @@ public class DefaultRunContextManager implements RunContextManager {
String id = contextDef.getId(); String id = contextDef.getId();
BaseRunContext parentContext = context.getParentContext(); BaseRunContext parentContext = context.getParentContext();
if (context instanceof PipelineRunContext pipelineRunContext) { if (context instanceof PipelineRunContext pipelineRunContext) {
if (contextMap.containsKey(id)) {
PipelineRunContext oldPipeline = contextMap.get(id);
oldPipeline.changeContextStateAndChild(ContextStateEnum.BAD_ENDING);
}
contextMap.put(id,pipelineRunContext); contextMap.put(id,pipelineRunContext);
} else { } else {
if (parentContext==null) { if (parentContext==null) {
@ -90,12 +84,4 @@ public class DefaultRunContextManager implements RunContextManager {
} }
return null; return null;
} }
public void changePipelineState(String pipelineId,ContextStateEnum stateEnum){
PipelineRunContext pipelineRunContext = contextMap.get(pipelineId);
if (pipelineRunContext==null) {
return;
}
pipelineRunContext.changeContextStateAndChild(stateEnum);
}
} }

View File

@ -6,18 +6,13 @@ import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@Data @Data
@Slf4j
public abstract class BaseRunContext { public abstract class BaseRunContext {
/** /**
* 当前上下文的定义 * 当前上下文的定义
@ -51,10 +46,6 @@ public abstract class BaseRunContext {
* */ * */
private Map<String,Object> localVariables; private Map<String,Object> localVariables;
private Map<String,BaseRunContext> childContext; private Map<String,BaseRunContext> childContext;
/**
* 用来在控制其他地方的阻塞放行,countDown为1
* */
private CountDownLatch countDownLatch;
public BaseRunContext(PipBaseElement contextDef,Integer childCount,BaseRunContext parentContext, LocalDateTime startTime, String resourceId, String targetVersionId, String targetType, Map<String, Object> globalVariables, Map<String, Object> localVariables, Map<String, BaseRunContext> childContext) { public BaseRunContext(PipBaseElement contextDef,Integer childCount,BaseRunContext parentContext, LocalDateTime startTime, String resourceId, String targetVersionId, String targetType, Map<String, Object> globalVariables, Map<String, Object> localVariables, Map<String, BaseRunContext> childContext) {
this.contextDef = contextDef; this.contextDef = contextDef;
@ -73,23 +64,9 @@ public abstract class BaseRunContext {
ContextStateEnum curr = ContextStateEnum.getByCode(state.get()); ContextStateEnum curr = ContextStateEnum.getByCode(state.get());
if (ContextStateEnum.canGoto(curr,stateEnum)) { if (ContextStateEnum.canGoto(curr,stateEnum)) {
state.compareAndExchange(curr.getCode(),stateEnum.getCode()); state.compareAndExchange(curr.getCode(),stateEnum.getCode());
// 如果之前有暂停监听状态的.则停止暂停
// unpause();
callParentChange(stateEnum); callParentChange(stateEnum);
} }
} }
public void changeContextStateAndChild(ContextStateEnum stateEnum){
ContextStateEnum curr = ContextStateEnum.getByCode(state.get());
if (ContextStateEnum.canGoto(curr,stateEnum)) {
state.compareAndExchange(curr.getCode(),stateEnum.getCode());
Collection<BaseRunContext> values = this.getChildContext().values();
if (!CollectionUtils.isEmpty(values)) {
for (BaseRunContext value : values) {
value.changeContextStateAndChild(stateEnum);
}
}
}
}
// 保证一直都操作同一个引用的值 // 保证一直都操作同一个引用的值
private void setState(AtomicInteger state) { private void setState(AtomicInteger state) {
this.state = state; this.state = state;
@ -106,7 +83,6 @@ public abstract class BaseRunContext {
} }
if (ContextStateEnum.HAPPY_ENDING.equals(state)||ContextStateEnum.BAD_ENDING.equals(state)) { if (ContextStateEnum.HAPPY_ENDING.equals(state)||ContextStateEnum.BAD_ENDING.equals(state)) {
this.endTime=LocalDateTime.now(); this.endTime=LocalDateTime.now();
unpause();
parentContext.checkChildEnd(); parentContext.checkChildEnd();
} else if(ContextStateEnum.READY.equals(state)){ } else if(ContextStateEnum.READY.equals(state)){
parentContext.checkChildReady(); parentContext.checkChildReady();
@ -187,25 +163,4 @@ public abstract class BaseRunContext {
} }
} }
} }
public void pause(){
if (countDownLatch==null) {
synchronized(this) {
if (this.countDownLatch == null) {
this.countDownLatch= new CountDownLatch(1);
}
}
}
try {
this.countDownLatch.await();
} catch (InterruptedException e) {
log.error(e.getMessage());}
}
private void unpause(){
if (this.countDownLatch!=null) {
this.countDownLatch.countDown();
if (this.countDownLatch.getCount()==0) {
this.countDownLatch=null;
}
}
}
} }

View File

@ -44,7 +44,7 @@ public class AFLWorker extends SshWorker {
//获取机器 //获取机器
MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId);
statusCode = shell(machineInfoDO, null, context, statusCode = shell(machineInfoDO, CryptogramUtil.doDecrypt(machineInfoDO.getPassword()), context,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",
commandScript commandScript
); );
@ -56,10 +56,8 @@ public class AFLWorker extends SshWorker {
} }
if (statusCode == 0) { if (statusCode == 0) {
log.info("节点执行完成"); log.info("节点执行完成");
append(context,"节点执行完成");
} else { } else {
log.error("节点执行失败"); log.error("节点执行失败");
append(context,"节点执行失败");
} }
localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode); localVariables.put(DIYImageExecuteCommandConstant.STATUS_CODE, statusCode);
} }

View File

@ -8,7 +8,6 @@ import cd.casic.ci.process.engine.worker.base.SshWorker;
import cd.casic.ci.process.process.dataObject.log.PipTaskLog; import cd.casic.ci.process.process.dataObject.log.PipTaskLog;
import cd.casic.ci.process.process.dataObject.machine.MachineInfo; import cd.casic.ci.process.process.dataObject.machine.MachineInfo;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.util.CryptogramUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -56,8 +55,7 @@ public class DIYImageExecuteCommandWorker extends SshWorker {
//获取机器 //获取机器
MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId); MachineInfo machineInfoDO = this.getMachineInfoService().getById(machineId);
//TODO 得改一下 statusCode = shell(machineInfoDO,"Hnidc@0626cn!@#zyx",context,
statusCode = shell(machineInfoDO, null,context,
"echo \"自定义镜像执行命令\"", "echo \"自定义镜像执行命令\"",
commandScript commandScript
); );

View File

@ -34,38 +34,38 @@ public class TargetHandleWorker extends BaseWorker {
private MachineInfoService machineInfoService; private MachineInfoService machineInfoService;
@Override @Override
public void execute(TaskRunContext context) { public void execute(TaskRunContext context) {
// String filePath = ""; String filePath = "";
// Map<String, Object> localVariables = context.getLocalVariables(); Map<String, Object> localVariables = context.getLocalVariables();
// PipBaseElement taskContextDef = context.getContextDef(); PipBaseElement taskContextDef = context.getContextDef();
// if (taskContextDef instanceof PipTask pipTask){ if (taskContextDef instanceof PipTask pipTask){
// // 查询并下载目标文件 // 查询并下载目标文件
// String pipelineId = pipTask.getPipelineId(); String pipelineId = pipTask.getPipelineId();
// //根据流水线id查询流水线信息 //根据流水线id查询流水线信息
// PipPipeline pipeline = (PipPipeline) getContextManager().getContext(pipelineId).getContextDef(); PipPipeline pipeline = (PipPipeline) getContextManager().getContext(pipelineId).getContextDef();
// //根据目标id查询目标信息 //根据目标id查询目标信息
// if (StringUtils.isEmpty(pipeline.getTargetVersionId())){ if (StringUtils.isEmpty(pipeline.getTargetVersionId())){
// throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标文件不存在"); throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"目标文件不存在");
// } }
// TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId()); TargetVersion targetVersion = targetVersionService.getById(pipeline.getTargetVersionId());
// filePath = targetVersion.getFilePath(); filePath = targetVersion.getFilePath();
// File file = new File(filePath); File file = new File(filePath);
// if (!file.exists() || !file.canRead()) { if (!file.exists() || !file.canRead()) {
// log.error("目标文件不存在或不可读"); log.error("目标文件不存在或不可读");
// localVariables.put("statusCode", "-1"); localVariables.put("statusCode", "-1");
// append(context,"目标文件不存在或不可读"); append(context,"目标文件不存在或不可读");
// toBadEnding(); toBadEnding();
// } }
// // 上传文件 // 上传文件
// String machineId = pipeline.getMachineId(); String machineId = pipeline.getMachineId();
// MachineInfo byId = machineInfoService.getById(machineId); MachineInfo byId = machineInfoService.getById(machineId);
// append(context,"开始文件上传"); append(context,"开始文件上传");
// try { try {
// SftpUploadUtil.uploadFileViaSftp(byId.getMachineHost(),byId.getSshPort(),byId.getUsername(), CryptogramUtil.doDecrypt(byId.getPassword()),null,file.getAbsolutePath(),"/home/casic/706/ai_test_527",file.getName()); SftpUploadUtil.uploadFileViaSftp(byId.getMachineHost(),byId.getSshPort(),byId.getUsername(), CryptogramUtil.doDecrypt(byId.getPassword()),null,file.getAbsolutePath(),"/home/casic/706/ai_test_527",file.getName());
// } catch (SftpUploadUtil.SftpUploadException e) { } catch (SftpUploadUtil.SftpUploadException e) {
// log.error("文件上传失败",e); log.error("文件上传失败",e);
// toBadEnding(); toBadEnding();
// } }
// append(context,"文件上传至"+byId.getMachineHost()+" /home/casic/706/ai_test_527"); append(context,"文件上传至"+byId.getMachineHost()+" /home/casic/706/ai_test_527");
// } }
} }
} }

View File

@ -1,6 +1,5 @@
package cd.casic.ci.process.engine.worker; package cd.casic.ci.process.engine.worker;
import cd.casic.ci.common.pipeline.annotation.Plugin;
import cd.casic.ci.process.engine.runContext.TaskRunContext; import cd.casic.ci.process.engine.runContext.TaskRunContext;
import cd.casic.ci.process.engine.worker.base.BaseWorker; import cd.casic.ci.process.engine.worker.base.BaseWorker;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement; import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
@ -9,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Plugin(taskType = "GIT") //@Plugin(taskType = "test")
public class TestWorker extends BaseWorker { public class TestWorker extends BaseWorker {

View File

@ -68,7 +68,6 @@ public abstract class BaseWorker implements Runnable{
} catch (Exception e) { } catch (Exception e) {
log.error("================worker执行报错",e); log.error("================worker执行报错",e);
taskRunContext.changeContextState(ContextStateEnum.BAD_ENDING); taskRunContext.changeContextState(ContextStateEnum.BAD_ENDING);
append(context,e.getMessage());
return; return;
} }
// TODO 执行结束修改context的state,并且通知父类 // TODO 执行结束修改context的state,并且通知父类

View File

@ -2,7 +2,7 @@ package cd.casic.ci.process.engine.worker.base;
import cd.casic.ci.process.engine.enums.ContextStateEnum; import cd.casic.ci.process.engine.enums.ContextStateEnum;
public interface PassableWorker{ public abstract class PassableWorker extends BaseWorker{
/** /**
* 这个方法用于阻塞 * 这个方法用于阻塞
* */ * */

View File

@ -190,15 +190,7 @@ public class SshCommand implements SshClient {
} else { } else {
realCmd = cmd; realCmd = cmd;
} }
for (String s : realCmd.split("\n")) { commander.append(realCmd).append(CommandConstant.ENTER);
commander.append(s).append(CommandConstant.ENTER);
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
} }
commander.append("exit").append(CommandConstant.ENTER); commander.append("exit").append(CommandConstant.ENTER);

View File

@ -97,26 +97,4 @@
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project> </project>

View File

@ -1,6 +1,5 @@
package cd.casic.module.system.service.dict; package cd.casic.module.system.service.dict;
import cd.casic.framework.commons.util.collection.CollectionUtils;
import cd.casic.module.system.controller.admin.dict.vo.data.DictDataRespVO; import cd.casic.module.system.controller.admin.dict.vo.data.DictDataRespVO;
import cd.casic.module.system.controller.admin.dict.vo.data.DictDataTreeVO; import cd.casic.module.system.controller.admin.dict.vo.data.DictDataTreeVO;
import cd.casic.module.system.convert.dict.DictDataConvert; import cd.casic.module.system.convert.dict.DictDataConvert;
@ -8,6 +7,7 @@ import cd.casic.module.system.convert.dict.DictTypeConvert;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cd.casic.framework.commons.enums.CommonStatusEnum; import cd.casic.framework.commons.enums.CommonStatusEnum;
import cd.casic.framework.commons.pojo.PageResult; import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.framework.commons.util.collection.CollectionUtils;
import cd.casic.framework.commons.util.object.BeanUtils; import cd.casic.framework.commons.util.object.BeanUtils;
import cd.casic.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import cd.casic.module.system.controller.admin.dict.vo.data.DictDataPageReqVO;
import cd.casic.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; import cd.casic.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO;
@ -192,9 +192,7 @@ public class DictDataServiceImpl implements DictDataService {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
return dataTree; return dataTree;
} }
if (org.springframework.util.CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
Map<String, List<DictDataRespVO>> map = list.stream().collect(Collectors.groupingBy(DictDataRespVO::getDictType)); Map<String, List<DictDataRespVO>> map = list.stream().collect(Collectors.groupingBy(DictDataRespVO::getDictType));
for (DictDataTreeVO treeVO : dataTree) { for (DictDataTreeVO treeVO : dataTree) {
treeVO.setChildren(map.get(treeVO.getType())); treeVO.setChildren(map.get(treeVO.getType()));

View File

@ -1,6 +0,0 @@
package cd.casic.server;
public class LogTest {
public static void main(String[] args) {
}
}

File diff suppressed because one or more lines are too long