|
@@ -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<DataSetParam> getMapper() {
|
|
|
|
+ return dataSetParamMapper;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 参数替换
|
|
|
|
+ *
|
|
|
|
+ * @param contextData
|
|
|
|
+ * @param dynSentence
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public String transform(Map<String, Object> 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<DataSetParamDto> dataSetParamDtoList, String dynSentence) {
|
|
|
|
+ Map<String, Object> 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<DataSetParamDto> dataSetParamDtoList, Map<String, Object> 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;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|