diff --git a/src/main/java/cn/lihongjie/coal/jobPost/dto/JobPostDto.java b/src/main/java/cn/lihongjie/coal/jobPost/dto/JobPostDto.java index b81d4de4..257aaadc 100644 --- a/src/main/java/cn/lihongjie/coal/jobPost/dto/JobPostDto.java +++ b/src/main/java/cn/lihongjie/coal/jobPost/dto/JobPostDto.java @@ -4,8 +4,10 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.util.List; + @Data public class JobPostDto extends OrgCommonDto { - private Integer empCount; + private List selfEmpIds; } diff --git a/src/main/java/cn/lihongjie/coal/jobPost/entity/JobPostEntity.java b/src/main/java/cn/lihongjie/coal/jobPost/entity/JobPostEntity.java index d9b6095a..5052348f 100644 --- a/src/main/java/cn/lihongjie/coal/jobPost/entity/JobPostEntity.java +++ b/src/main/java/cn/lihongjie/coal/jobPost/entity/JobPostEntity.java @@ -2,16 +2,25 @@ package cn.lihongjie.coal.jobPost.entity; import cn.lihongjie.coal.base.entity.OrgCommonEntity; +import io.hypersistence.utils.hibernate.type.array.ListArrayType; + import jakarta.persistence.Entity; import lombok.Data; import org.hibernate.annotations.Formula; +import org.hibernate.annotations.Type; + +import java.util.List; @Data @Entity public class JobPostEntity extends OrgCommonEntity { - @Formula("(select count(*) from t_employee e where e.job_post_id = id)") - private Integer empCount; + + + + @Type(ListArrayType.class) + @Formula("(select array_agg(e.id) from t_employee e where e.job_post_id = id)") + private List selfEmpIds; } diff --git a/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java b/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java index 58df3b6a..3a089824 100644 --- a/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java +++ b/src/main/java/cn/lihongjie/coal/script/service/ScriptService.java @@ -16,6 +16,8 @@ import cn.lihongjie.coal.script.mapper.ScriptMapper; import cn.lihongjie.coal.script.repository.ScriptRepository; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import groovy.lang.GroovyClassLoader; import groovy.lang.Script; @@ -26,6 +28,7 @@ import lombok.Cleanup; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -43,6 +46,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StopWatch; import java.nio.charset.StandardCharsets; import java.util.List; @@ -199,21 +203,35 @@ class ScriptService extends BaseService { @Autowired ObjectMapper objectMapper; + + private final Cache> scriptCache = CacheBuilder.newBuilder().maximumSize(10000).build(); @SneakyThrows public ScriptExecResultDto exec(ScriptExecResultDto json) throws ScriptException { + StopWatch stopWatch = new StopWatch("script"); + stopWatch + .start("get"); // 执行groovy脚本 // 1. 从数据库中获取脚本 ScriptEntity scriptEntity = this.get(json.getId()); + stopWatch.stop(); + // 2. 执行脚本 + stopWatch.start("parseClass"); Class parsedClass = - groovyClassLoader.parseClass(scriptEntity.getContent(), scriptEntity.getId()); + scriptCache.get(scriptEntity.getId() + DigestUtils.md5Hex(scriptEntity.getContent()), () ->groovyClassLoader.parseClass(scriptEntity.getContent(), scriptEntity.getId())); + stopWatch.stop(); + + stopWatch.start("newInstance"); Script script = (Script) parsedClass.newInstance(); + stopWatch.stop(); + stopWatch.start("prepare"); + Logger scriptLogger = LoggerFactory.getLogger("scriptLogger"); ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) scriptLogger; @@ -237,6 +255,9 @@ class ScriptService extends BaseService { script.setProperty("params", ObjectUtils.defaultIfNull(json.getParams(), objectMapper.createObjectNode())); script.setProperty("ioc", applicationContext); + stopWatch.stop(); + + stopWatch.start("run"); long start = System.currentTimeMillis(); try { @@ -245,11 +266,11 @@ class ScriptService extends BaseService { json.setStackTrace(ExceptionUtils.getStackTrace(e)); } long end = System.currentTimeMillis(); - + stopWatch.stop(); // 3. 返回结果 json.setLogs(appender.list.stream().map(x -> x.getFormattedMessage()).toList()); json.setTime(end - start); - +// logger.info("{}", stopWatch.prettyPrint()); return json; } }