From 0162467aed374f5adc264164a7d15e4cc23d8852 Mon Sep 17 00:00:00 2001 From: Raod <1130305001@qq.com> Date: Tue, 22 Jun 2021 14:17:45 +0800 Subject: [PATCH] dataset --- .../controller/DataSetParamController.java | 62 ++++++++ .../controller/dto/DataSetParamDto.java | 48 +++++++ .../controller/param/DataSetParamParam.java | 17 +++ .../param/DataSetParamValidationParam.java | 22 +++ .../dataSetParam/dao/DataSetParamMapper.java | 15 ++ .../dataSetParam/dao/entity/DataSetParam.java | 48 +++++++ .../service/DataSetParamService.java | 52 +++++++ .../service/impl/DataSetParamServiceImpl.java | 136 ++++++++++++++++++ .../util/ParamsResolverHelper.java | 36 +++++ .../DataSetTransformController.java | 44 ++++++ .../controller/dto/DataSetTransformDto.java | 36 +++++ .../param/DataSetTransformParam.java | 17 +++ .../dao/DataSetTransformMapper.java | 15 ++ .../dao/entity/DataSetTransform.java | 36 +++++ .../service/DataSetTransformService.java | 21 +++ .../service/TransformStrategy.java | 25 ++++ .../impl/DataSetTransformServiceImpl.java | 71 +++++++++ .../impl/DictTransformServiceImpl.java | 56 ++++++++ .../service/impl/JsTransformServiceImpl.java | 62 ++++++++ 19 files changed, 819 insertions(+) create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/DataSetParamController.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/dto/DataSetParamDto.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamParam.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamValidationParam.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/DataSetParamMapper.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/entity/DataSetParam.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/DataSetParamService.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/impl/DataSetParamServiceImpl.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/util/ParamsResolverHelper.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/DataSetTransformController.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/dto/DataSetTransformDto.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/param/DataSetTransformParam.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/DataSetTransformMapper.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/entity/DataSetTransform.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/DataSetTransformService.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/TransformStrategy.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DataSetTransformServiceImpl.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DictTransformServiceImpl.java create mode 100644 report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/JsTransformServiceImpl.java diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/DataSetParamController.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/DataSetParamController.java new file mode 100644 index 00000000..dbefff3b --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/DataSetParamController.java @@ -0,0 +1,62 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller; + +import com.anji.plus.gaea.bean.ResponseBean; +import com.anji.plus.gaea.curd.controller.GaeaBaseController; +import com.anji.plus.gaea.curd.service.GaeaBaseService; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamValidationParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.DataSetParamService; +import com.anjiplus.template.gaea.business.modules.data.dataSource.controller.param.ConnectionParam; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** +* @desc 数据集动态参数 controller +* @website https://gitee.com/anji-plus/gaea +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@RestController +@Api(tags = "数据集动态参数管理") +@RequestMapping("/dataSetParam") +public class DataSetParamController extends GaeaBaseController { + + @Autowired + private DataSetParamService dataSetParamService; + + @Override + public GaeaBaseService getService() { + return dataSetParamService; + } + + @Override + public DataSetParam getEntity() { + return new DataSetParam(); + } + + @Override + public DataSetParamDto getDTO() { + return new DataSetParamDto(); + } + + /** + * 测试 查询参数是否正确 + * @param param + * @return + */ + @PostMapping("/verification") + public ResponseBean verification(@Validated @RequestBody DataSetParamValidationParam param) { + DataSetParamDto dto = new DataSetParamDto(); + dto.setSampleItem(param.getSampleItem()); + dto.setValidationRules(param.getValidationRules()); + return responseSuccessWithData(dataSetParamService.verification(dto)); + } +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/dto/DataSetParamDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/dto/DataSetParamDto.java new file mode 100644 index 00000000..546eba3a --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/dto/DataSetParamDto.java @@ -0,0 +1,48 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto; + +import com.anji.plus.gaea.curd.dto.GaeaBaseDTO; +import lombok.Data; + +import java.io.Serializable; + + +/** +* +* @description 数据集动态参数 dto +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@Data +public class DataSetParamDto extends GaeaBaseDTO implements Serializable { + /** 数据集编码 */ + private String setCode; + + /** 参数名 */ + private String paramName; + + /** 参数描述 */ + private String paramDesc; + + /** 参数类型,字典= */ + private String paramType; + + /** 参数示例项 */ + private String sampleItem; + + /** 0--非必填 1--必填 DIC_NAME=REQUIRED_FLAG */ + private Integer requiredFlag; + + /** js校验字段值规则,满足校验返回 true */ + private String validationRules; + + /** 排序 */ + private Integer orderNum; + + /** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */ + private Integer enableFlag; + + /** 0--未删除 1--已删除 DIC_NAME=DELETE_FLAG */ + private Integer deleteFlag; + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamParam.java new file mode 100644 index 00000000..7c1513bf --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamParam.java @@ -0,0 +1,17 @@ +/**/ +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param; + +import com.anji.plus.gaea.curd.params.PageParam; +import lombok.Data; + +import java.io.Serializable; + + +/** +* @desc DataSetParam 数据集动态参数查询输入类 +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@Data +public class DataSetParamParam extends PageParam implements Serializable{ +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamValidationParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamValidationParam.java new file mode 100644 index 00000000..530e210f --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/controller/param/DataSetParamValidationParam.java @@ -0,0 +1,22 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * Created by raodeming on 2021/3/24. + */ +@Data +public class DataSetParamValidationParam implements Serializable { + + /** 参数示例项 */ + @NotBlank(message = "sampleItem not empty") + private String sampleItem; + + + /** js校验字段值规则,满足校验返回 true */ + @NotBlank(message = "validationRules not empty") + private String validationRules; +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/DataSetParamMapper.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/DataSetParamMapper.java new file mode 100644 index 00000000..fae58736 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/DataSetParamMapper.java @@ -0,0 +1,15 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao; + +import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam; +import org.apache.ibatis.annotations.Mapper; + +/** +* DataSetParam Mapper +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@Mapper +public interface DataSetParamMapper extends GaeaBaseMapper { + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/entity/DataSetParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/entity/DataSetParam.java new file mode 100644 index 00000000..758a01ea --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/dao/entity/DataSetParam.java @@ -0,0 +1,48 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity; + +import com.anji.plus.gaea.curd.entity.GaeaBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** +* @description 数据集动态参数 entity +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@TableName(value="gaea_report_data_set_param") +@Data +public class DataSetParam extends GaeaBaseEntity { + @ApiModelProperty(value = "数据集编码") + private String setCode; + + @ApiModelProperty(value = "参数名") + private String paramName; + + @ApiModelProperty(value = "参数描述") + private String paramDesc; + + @ApiModelProperty(value = "参数类型,字典=") + private String paramType; + + @ApiModelProperty(value = "参数示例项") + private String sampleItem; + + @ApiModelProperty(value = "0--非必填 1--必填 DIC_NAME=REQUIRED_FLAG") + private Integer requiredFlag; + + @ApiModelProperty(value = "js校验字段值规则,满足校验返回 true") + private String validationRules; + + @ApiModelProperty(value = "排序") + private Integer orderNum; + + @ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG") + private Integer enableFlag; + + @ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG") + private Integer deleteFlag; + + +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/DataSetParamService.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/DataSetParamService.java new file mode 100644 index 00000000..6ae3a2fb --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/DataSetParamService.java @@ -0,0 +1,52 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.service; + +import com.anji.plus.gaea.curd.service.GaeaBaseService; +import com.anjiplus.template.gaea.business.modules.data.dataSet.controller.dto.DataSetDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.param.DataSetParamParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam; + +import java.util.List; +import java.util.Map; + +/** + * @author Raod + * @desc DataSetParam 数据集动态参数服务接口 + * @date 2021-03-18 12:12:33.108033200 + **/ +public interface DataSetParamService extends GaeaBaseService { + + /** + * 参数替换 + * + * @param contextData + * @param dynSentence + * @return + */ + String transform(Map contextData, String dynSentence); + + /** + * 参数替换 + * + * @param dataSetParamDtoList + * @param dynSentence + * @return + */ + String transform(List dataSetParamDtoList, String dynSentence); + + /** + * 参数校验 js脚本 + * @param dataSetParamDto + * @return + */ + boolean verification(DataSetParamDto dataSetParamDto); + + /** + * 参数校验 js脚本 + * + * @param dataSetParamDtoList + * @return + */ + boolean verification(List dataSetParamDtoList, Map contextData); +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/impl/DataSetParamServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/impl/DataSetParamServiceImpl.java new file mode 100644 index 00000000..554caf60 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/service/impl/DataSetParamServiceImpl.java @@ -0,0 +1,136 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.impl; + +import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; +import com.anji.plus.gaea.exception.BusinessExceptionBuilder; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.controller.dto.DataSetParamDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.DataSetParamMapper; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.dao.entity.DataSetParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.service.DataSetParamService; +import com.anjiplus.template.gaea.business.modules.data.dataSetParam.util.ParamsResolverHelper; +import com.anjiplus.template.gaea.common.RespCommonCode; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @desc DataSetParam 数据集动态参数服务实现 +* @author Raod +* @date 2021-03-18 12:12:33.108033200 +**/ +@Service +//@RequiredArgsConstructor +@Slf4j +public class DataSetParamServiceImpl implements DataSetParamService { + + private ScriptEngine engine; + { + ScriptEngineManager manager = new ScriptEngineManager(); + engine = manager.getEngineByName("JavaScript"); + } + + @Autowired + private DataSetParamMapper dataSetParamMapper; + + @Override + public GaeaBaseMapper getMapper() { + return dataSetParamMapper; + } + + /** + * 参数替换 + * + * @param contextData + * @param dynSentence + * @return + */ + @Override + public String transform(Map contextData, String dynSentence) { + if (StringUtils.isBlank(dynSentence)) { + return dynSentence; + } + if (dynSentence.contains("${")) { + dynSentence = ParamsResolverHelper.resolveParams(contextData, dynSentence); + } + if (dynSentence.contains("${")) { + throw BusinessExceptionBuilder.build(RespCommonCode.INCOMPLETE_PARAMETER_REPLACEMENT_VALUES, dynSentence); + } + return dynSentence; + } + + /** + * 参数替换 + * + * @param dataSetParamDtoList + * @param dynSentence + * @return + */ + @Override + public String transform(List dataSetParamDtoList, String dynSentence) { + Map contextData = new HashMap<>(); + if (null == dataSetParamDtoList || dataSetParamDtoList.size() <= 0) { + return dynSentence; + } + dataSetParamDtoList.forEach(dataSetParamDto -> { + contextData.put(dataSetParamDto.getParamName(), dataSetParamDto.getSampleItem()); + }); + return transform(contextData, dynSentence); + } + + /** + * 参数校验 js脚本 + * + * @param dataSetParamDto + * @return + */ + @Override + public boolean verification(DataSetParamDto dataSetParamDto) { + + String sampleItem = dataSetParamDto.getSampleItem(); + String validationRules = dataSetParamDto.getValidationRules(); + if (StringUtils.isNotBlank(validationRules)) { + validationRules = validationRules + "\nvar result = verification('" + sampleItem + "');"; + try { + engine.eval(validationRules); + return Boolean.parseBoolean(engine.get("result").toString()); + + } catch (Exception ex) { + throw BusinessExceptionBuilder.build(RespCommonCode.EXECUTE_JS_ERROR, ex.getMessage()); + } + + } + return true; + } + + /** + * 参数校验 js脚本 + * + * @param dataSetParamDtoList + * @return + */ + @Override + public boolean verification(List dataSetParamDtoList, Map contextData) { + if (null == dataSetParamDtoList || dataSetParamDtoList.size() == 0) { + return true; + } + + for (DataSetParamDto dataSetParamDto : dataSetParamDtoList) { + if (null != contextData) { + String value = contextData.getOrDefault(dataSetParamDto.getParamName(), "").toString(); + dataSetParamDto.setSampleItem(value); + } + if (!verification(dataSetParamDto)) { + return false; + } + } + return true; + } + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/util/ParamsResolverHelper.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/util/ParamsResolverHelper.java new file mode 100644 index 00000000..e0d79bff --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetParam/util/ParamsResolverHelper.java @@ -0,0 +1,36 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetParam.util; + +import org.springframework.util.PropertyPlaceholderHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by raodeming on 2021/3/23. + */ +public class ParamsResolverHelper { + private static String placeholderPrefix = "${"; + private static String placeholderSuffix = "}"; + private static PropertyPlaceholderHelper helper = + new PropertyPlaceholderHelper(placeholderPrefix, placeholderSuffix); + + public static String resolveParams(final Map param, String con) { + con = helper.replacePlaceholders(con, (key -> param.get(key) + "")); + return con; + } + + private static Pattern key = Pattern.compile("\\$\\{(.*?)\\}"); + + public static List findParamKeys(String con) { + Matcher m = key.matcher(con); + List ret = new ArrayList(); + while (m.find()) { + ret.add(m.group(1)); + } + return ret; + } + +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/DataSetTransformController.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/DataSetTransformController.java new file mode 100644 index 00000000..4c5ff8b0 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/DataSetTransformController.java @@ -0,0 +1,44 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller; + +import com.anji.plus.gaea.curd.controller.GaeaBaseController; +import com.anji.plus.gaea.curd.service.GaeaBaseService; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param.DataSetTransformParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.DataSetTransformService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** +* @desc 数据集数据转换 controller +* @website https://gitee.com/anji-plus/gaea +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@RestController +@Api(tags = "数据集数据转换管理") +@RequestMapping("/dataSetTransform") +public class DataSetTransformController extends GaeaBaseController { + + @Autowired + private DataSetTransformService dataSetTransformService; + + @Override + public GaeaBaseService getService() { + return dataSetTransformService; + } + + @Override + public DataSetTransform getEntity() { + return new DataSetTransform(); + } + + @Override + public DataSetTransformDto getDTO() { + return new DataSetTransformDto(); + } + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/dto/DataSetTransformDto.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/dto/DataSetTransformDto.java new file mode 100644 index 00000000..53001d45 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/dto/DataSetTransformDto.java @@ -0,0 +1,36 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto; + +import com.anji.plus.gaea.curd.dto.GaeaBaseDTO; +import lombok.Data; + +import java.io.Serializable; + + +/** +* +* @description 数据集数据转换 dto +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@Data +public class DataSetTransformDto extends GaeaBaseDTO implements Serializable { + /** 数据集编码 */ + private String setCode; + + /** 数据转换类型,DIC_NAME=TRANSFORM_TYPE; js,javaBean,字典转换 */ + private String transformType; + + /** 数据转换script,处理逻辑 */ + private String transformScript; + + /** 排序,执行数据转换顺序 */ + private Integer orderNum; + + /** 0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG */ + private Integer enableFlag; + + /** 0--未删除 1--已删除 DIC_NAME=DELETE_FLAG */ + private Integer deleteFlag; + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/param/DataSetTransformParam.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/param/DataSetTransformParam.java new file mode 100644 index 00000000..13752b5f --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/controller/param/DataSetTransformParam.java @@ -0,0 +1,17 @@ +/**/ +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param; + +import com.anji.plus.gaea.curd.params.PageParam; +import lombok.Data; + +import java.io.Serializable; + + +/** +* @desc DataSetTransform 数据集数据转换查询输入类 +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@Data +public class DataSetTransformParam extends PageParam implements Serializable{ +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/DataSetTransformMapper.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/DataSetTransformMapper.java new file mode 100644 index 00000000..6c04dba9 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/DataSetTransformMapper.java @@ -0,0 +1,15 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao; + +import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform; +import org.apache.ibatis.annotations.Mapper; + +/** +* DataSetTransform Mapper +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@Mapper +public interface DataSetTransformMapper extends GaeaBaseMapper { + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/entity/DataSetTransform.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/entity/DataSetTransform.java new file mode 100644 index 00000000..4ad053ed --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/dao/entity/DataSetTransform.java @@ -0,0 +1,36 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity; + +import com.anji.plus.gaea.curd.entity.GaeaBaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** +* @description 数据集数据转换 entity +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@TableName(value="gaea_report_data_set_transform") +@Data +public class DataSetTransform extends GaeaBaseEntity { + @ApiModelProperty(value = "数据集编码") + private String setCode; + + @ApiModelProperty(value = "数据转换类型,DIC_NAME=TRANSFORM_TYPE; js,javaBean,字典转换") + private String transformType; + + @ApiModelProperty(value = "数据转换script,处理逻辑") + private String transformScript; + + @ApiModelProperty(value = "排序,执行数据转换顺序") + private Integer orderNum; + + @ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG") + private Integer enableFlag; + + @ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG") + private Integer deleteFlag; + + +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/DataSetTransformService.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/DataSetTransformService.java new file mode 100644 index 00000000..41997d30 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/DataSetTransformService.java @@ -0,0 +1,21 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service; + +import com.alibaba.fastjson.JSONObject; +import com.anji.plus.gaea.curd.service.GaeaBaseService; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.param.DataSetTransformParam; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform; + +import java.util.List; + +/** +* @desc DataSetTransform 数据集数据转换服务接口 +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +public interface DataSetTransformService extends GaeaBaseService { + + List transform(List dataSetTransformDtoList, List data); + +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/TransformStrategy.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/TransformStrategy.java new file mode 100644 index 00000000..b8935771 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/TransformStrategy.java @@ -0,0 +1,25 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service; + +import com.alibaba.fastjson.JSONObject; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; + +import java.util.List; + +/** + * Created by raodeming on 2021/3/23. + */ +public interface TransformStrategy { + /** + * 数据清洗转换 类型 + * @return + */ + String type(); + + /*** + * 清洗转换算法接口 + * @param def + * @param data + * @return + */ + List transform(DataSetTransformDto def, List data); +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DataSetTransformServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DataSetTransformServiceImpl.java new file mode 100644 index 00000000..f61d1167 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DataSetTransformServiceImpl.java @@ -0,0 +1,71 @@ + +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.DataSetTransformMapper; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.dao.entity.DataSetTransform; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.DataSetTransformService; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.TransformStrategy; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @desc DataSetTransform 数据集数据转换服务实现 +* @author Raod +* @date 2021-03-18 12:13:15.591309400 +**/ +@Service +//@RequiredArgsConstructor +public class DataSetTransformServiceImpl implements DataSetTransformService, InitializingBean, ApplicationContextAware { + + private final Map queryServiceImplMap = new HashMap<>(); + private ApplicationContext applicationContext; + + @Autowired + private DataSetTransformMapper dataSetTransformMapper; + + @Override + public GaeaBaseMapper getMapper() { + return dataSetTransformMapper; + } + + public TransformStrategy getTarget(String type) { + return queryServiceImplMap.get(type); + } + + @Override + public void afterPropertiesSet() { + Map beanMap = applicationContext.getBeansOfType(TransformStrategy.class); + //遍历该接口的所有实现,将其放入map中 + for (TransformStrategy serviceImpl : beanMap.values()) { + queryServiceImplMap.put(serviceImpl.type(), serviceImpl); + } + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + @Override + public List transform(List dataSetTransformDtoList, List data) { + if (dataSetTransformDtoList == null || dataSetTransformDtoList.size() <= 0) { + return data; + } + + for (DataSetTransformDto dataSetTransformDto : dataSetTransformDtoList) { + data = getTarget(dataSetTransformDto.getTransformType()).transform(dataSetTransformDto, data); + } + return data; + } +} \ No newline at end of file diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DictTransformServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DictTransformServiceImpl.java new file mode 100644 index 00000000..ff4de0ed --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/DictTransformServiceImpl.java @@ -0,0 +1,56 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.TransformStrategy; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +/** + * 字典转换 + * Created by raodeming on 2021/3/29. + */ +@Component +@Slf4j +public class DictTransformServiceImpl implements TransformStrategy { + + /** + * 数据清洗转换 类型 + * + * @return + */ + @Override + public String type() { + return "dict"; + } + + /*** + * 清洗转换算法接口 + * @param def + * @param data + * @return + */ + @Override + public List transform(DataSetTransformDto def, List data) { + String transformScript = def.getTransformScript(); + if (StringUtils.isBlank(transformScript)) { + return data; + } + JSONObject jsonObject = JSONObject.parseObject(transformScript); + Set keys = jsonObject.keySet(); + + data.forEach(dataDetail -> dataDetail.forEach((key, value) -> { + if (keys.contains(key)) { + String string = jsonObject.getJSONObject(key).getString(value.toString()); + if (StringUtils.isNotBlank(string)) { + dataDetail.put(key, string); + } + } + })); + return data; + } +} diff --git a/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/JsTransformServiceImpl.java b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/JsTransformServiceImpl.java new file mode 100644 index 00000000..1c41d583 --- /dev/null +++ b/report-core/src/main/java/com/anjiplus/template/gaea/business/modules/data/dataSetTransform/service/impl/JsTransformServiceImpl.java @@ -0,0 +1,62 @@ +package com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.anji.plus.gaea.exception.BusinessExceptionBuilder; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.controller.dto.DataSetTransformDto; +import com.anjiplus.template.gaea.business.modules.data.dataSetTransform.service.TransformStrategy; +import com.anjiplus.template.gaea.common.RespCommonCode; +import jdk.nashorn.api.scripting.ScriptObjectMirror; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created by raodeming on 2021/3/23. + */ +@Component +@Slf4j +public class JsTransformServiceImpl implements TransformStrategy { + + private ScriptEngine engine; + { + ScriptEngineManager manager = new ScriptEngineManager(); + engine = manager.getEngineByName("JavaScript"); + } + + /** + * 数据清洗转换 类型 + * + * @return + */ + @Override + public String type() { + return "js"; + } + + /*** + * 清洗转换算法接口 + * @param def + * @param data + * @return + */ + @Override + public List transform(DataSetTransformDto def, List data) { + return getValueFromJS(def,data); + } + + private List getValueFromJS(DataSetTransformDto def, List data) { + String js = def.getTransformScript(); + js = js + "\nvar result = dataTransform(eval(" + data.toString() + "));"; + try { + engine.eval(js); + ScriptObjectMirror result = (ScriptObjectMirror) engine.get("result"); + return result.values().stream().map(o -> JSONObject.parseObject(JSONObject.toJSONString(o))).collect(Collectors.toList()); + } catch (Exception ex) { + throw BusinessExceptionBuilder.build(RespCommonCode.EXECUTE_JS_ERROR, ex.getMessage()); + } + } +}