123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package com.ruoyi.ucp.glue;
- import com.ruoyi.ucp.glue.impl.SpringGlueFactory;
- import com.ruoyi.ucp.handler.IJobHandler;
- import groovy.lang.GroovyClassLoader;
- import java.math.BigInteger;
- import java.security.MessageDigest;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.concurrent.ConcurrentMap;
- /**
- * glue factory, product class/object by name
- *
- * @author xuxueli 2016-1-2 20:02:27
- */
- public class GlueFactory {
- private static GlueFactory glueFactory = new SpringGlueFactory();
- public static GlueFactory getInstance() {
- return glueFactory;
- }
- public static String getFunctionTemplate() {
- String FunctionTemplate = "package com.ruoyi.ucp;\n" +
- "\n" +
- "import cn.hutool.core.date.DateUtil;\n" +
- "import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\n" +
- "import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\n" +
- "import com.ruoyi.ucp.entity.StationInfoDay;\n" +
- "import com.ruoyi.ucp.feign.AdapterApi;\n" +
- "import com.ruoyi.ucp.handler.IJobHandler;\n" +
- "import com.ruoyi.ucp.service.ILineInfoDayService;\n" +
- "import com.ruoyi.ucp.service.IPointInfoService;\n" +
- "import com.ruoyi.ucp.service.IStationInfoDayService;\n" +
- "import com.ruoyi.ucp.service.IStationInfoHourService;\n" +
- "\n" +
- "import javax.annotation.Resource;\n" +
- "import java.util.Date;\n" +
- "import java.util.List;\n" +
- "import java.util.Map;\n" +
- "import java.util.function.Function;\n" +
- "import java.util.stream.Collectors;\n" +
- "\n" +
- "public class JavaFunctionJobHandler extends IJobHandler {\n" +
- "\n" +
- " @Resource\n" +
- " private AdapterApi adapter;\n" +
- " @Resource\n" +
- " private IPointInfoService pointService;\n" +
- " @Resource\n" +
- " private IStationInfoHourService stationInfoHourService;\n" +
- " @Resource\n" +
- " private IStationInfoDayService stationInfoDayService;\n" +
- " @Resource\n" +
- " private ILineInfoDayService lineInfoDayService;\n" +
- "\n" +
- " @Override\n" +
- " public void execute() throws Exception {\n" +
- "\n" +
- " }\n" +
- "\n" +
- " @Override\n" +
- " public IJobHandler getFunctionHandler() {\n" +
- " return null;\n" +
- " }\n" +
- "\n" +
- " @Override\n" +
- " public void setFunctionHandler(IJobHandler jobHandler) {\n" +
- "\n" +
- " }\n" +
- " //此处加公式\n" +
- "}";
- return FunctionTemplate;
- }
- public static void refreshInstance(int type) {
- if (type == 0) {
- glueFactory = new GlueFactory();
- } else if (type == 1) {
- glueFactory = new SpringGlueFactory();
- }
- }
- /**
- * groovy class loader
- */
- private GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
- private ConcurrentMap<String, Class<?>> CLASS_CACHE = new ConcurrentHashMap<>();
- /**
- * load new instance, prototype
- *
- * @param codeSource
- * @return
- * @throws Exception
- */
- public IJobHandler loadNewInstance(String codeSource) throws Exception {
- if (codeSource != null && codeSource.trim().length() > 0) {
- Class<?> clazz = getCodeSourceClass(codeSource);
- if (clazz != null) {
- Object instance = clazz.newInstance();
- if (instance != null) {
- if (instance instanceof IJobHandler) {
- this.injectService(instance);
- return (IJobHandler) instance;
- } else {
- throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, "
- + "cannot convert from instance[" + instance.getClass() + "] to IJobHandler");
- }
- }
- }
- }
- throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, instance is null");
- }
- private Class<?> getCodeSourceClass(String codeSource) {
- try {
- // md5
- byte[] md5 = MessageDigest.getInstance("MD5").digest(codeSource.getBytes());
- String md5Str = new BigInteger(1, md5).toString(16);
- Class<?> clazz = CLASS_CACHE.get(md5Str);
- if (clazz == null) {
- clazz = groovyClassLoader.parseClass(codeSource);
- CLASS_CACHE.putIfAbsent(md5Str, clazz);
- }
- return clazz;
- } catch (Exception e) {
- return groovyClassLoader.parseClass(codeSource);
- }
- }
- /**
- * inject service of bean field
- *
- * @param instance
- */
- public void injectService(Object instance) {
- // do something
- }
- }
|