diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index a99cde6dcf..7faaa1e829 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -67,6 +67,8 @@ public class ChartDataManage { @Resource private CorePermissionManage corePermissionManage; + public static final String START_END_SEPARATOR = "_START_END_SPLIT"; + private static Logger logger = LoggerFactory.getLogger(ChartDataManage.class); public ChartViewDTO calcData(ChartViewDTO view) throws Exception { @@ -246,7 +248,8 @@ public class ChartDataManage { List sqlVariables = datasetGroupManage.getSqlParams(Arrays.asList(view.getTableId())); if (CollectionUtil.isNotEmpty(sqlVariables)) { for (SqlVariableDetails parameter : Optional.ofNullable(request.getParameters()).orElse(new ArrayList<>())) { - if (sqlVariables.stream().map(SqlVariableDetails::getId).collect(Collectors.toList()).contains(parameter.getId())) { + String parameterId = StringUtils.endsWith(parameter.getId(), START_END_SEPARATOR) ? parameter.getId().split(START_END_SEPARATOR)[0] : parameter.getId(); + if (sqlVariables.stream().map(SqlVariableDetails::getId).collect(Collectors.toList()).contains(parameterId)) { hasParameters = true; } } diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index c4648d2eb4..eacb52d182 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static io.dataease.chart.manage.ChartDataManage.START_END_SEPARATOR; import static org.apache.calcite.sql.SqlKind.*; public class SqlparserUtils { @@ -166,7 +167,11 @@ public class SqlparserUtils { return "'" + String.join("','", sqlVariableDetails.getValue()) + "'"; } else if (sqlVariableDetails.getOperator().equals("between")) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(sqlVariableDetails.getType().size() > 1 ? (String) sqlVariableDetails.getType().get(1).replace("DD", "dd") : "YYYY"); - return simpleDateFormat.format(new Date(Long.parseLong((String) sqlVariableDetails.getValue().get(0)))); + if (StringUtils.endsWith(sqlVariableDetails.getId(), START_END_SEPARATOR)) { + return simpleDateFormat.format(new Date(Long.parseLong((String) sqlVariableDetails.getValue().get(1)))); + } else { + return simpleDateFormat.format(new Date(Long.parseLong((String) sqlVariableDetails.getValue().get(0)))); + } } else { return (String) sqlVariableDetails.getValue().get(0); } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java index e3ad66c17b..7f19164eb6 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java @@ -416,9 +416,6 @@ public class ExcelUtils { } List data = new ArrayList<>(noModelDataListener.getData()); if (isPreview) { - if (data.size() > 100) { - data = data.subList(0, 100); - } for (int i = 0; i < data.size(); i++) { for (int j = 0; j < data.get(i).length; j++) { if (j < fields.size()) { @@ -426,6 +423,9 @@ public class ExcelUtils { } } } + if (data.size() > 100) { + data = data.subList(0, 100); + } } for (int i = 0; i < fields.size(); i++) { @@ -472,6 +472,9 @@ public class ExcelUtils { } } } + if (data.size() > 100) { + data = data.subList(0, 100); + } } for (int i = 0; i < fields.size(); i++) { if (StringUtils.isEmpty(fields.get(i).getFieldType())) { diff --git a/core/core-backend/src/main/java/io/dataease/template/dao/ext/ExtVisualizationTemplateMapper.java b/core/core-backend/src/main/java/io/dataease/template/dao/ext/ExtVisualizationTemplateMapper.java index aab0d1be59..2aaf531330 100644 --- a/core/core-backend/src/main/java/io/dataease/template/dao/ext/ExtVisualizationTemplateMapper.java +++ b/core/core-backend/src/main/java/io/dataease/template/dao/ext/ExtVisualizationTemplateMapper.java @@ -17,4 +17,14 @@ public interface ExtVisualizationTemplateMapper{ List findBaseTemplateList(); + Long checkCategoryMap(@Param("categoryId") String categoryId); + + Long checkRepeatTemplateId(@Param("categoryId") String categoryId, @Param("templateId") String templateId); + + void deleteCategoryMapByTemplate(@Param("templateName") String templateName, @Param("templateId") String templateId); + + Long checkCategoryTemplateName(@Param("templateName") String templateName,@Param("categories") List categories); + + List findTemplateCategories(@Param("templateId") String templateId); + } diff --git a/core/core-backend/src/main/java/io/dataease/template/service/TemplateManageService.java b/core/core-backend/src/main/java/io/dataease/template/service/TemplateManageService.java index 295f0ff262..b679119b93 100644 --- a/core/core-backend/src/main/java/io/dataease/template/service/TemplateManageService.java +++ b/core/core-backend/src/main/java/io/dataease/template/service/TemplateManageService.java @@ -3,6 +3,7 @@ package io.dataease.template.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.dataease.api.template.TemplateManageApi; import io.dataease.api.template.dto.TemplateManageDTO; +import io.dataease.api.template.request.TemplateManageBatchRequest; import io.dataease.api.template.request.TemplateManageRequest; import io.dataease.api.template.vo.VisualizationTemplateVO; import io.dataease.constant.CommonConstants; @@ -56,16 +57,16 @@ public class TemplateManageService implements TemplateManageApi { request.setWithBlobs("N"); List templateList = extTemplateMapper.findTemplateList(request); if (request.getWithChildren()) { - getTreeChildren(templateList,request.getLeafDvType()); + getTreeChildren(templateList, request.getLeafDvType()); } return templateList; } - public void getTreeChildren(List parentTemplateList,String dvType) { + public void getTreeChildren(List parentTemplateList, String dvType) { Optional.ofNullable(parentTemplateList).ifPresent(parent -> parent.forEach(parentTemplate -> { - List panelTemplateDTOChildren = extTemplateMapper.findTemplateList(new TemplateManageRequest(parentTemplate.getId(),dvType)); + List panelTemplateDTOChildren = extTemplateMapper.findTemplateList(new TemplateManageRequest(parentTemplate.getId(), dvType)); parentTemplate.setChildren(panelTemplateDTOChildren); - getTreeChildren(panelTemplateDTOChildren,dvType); + getTreeChildren(panelTemplateDTOChildren, dvType); })); } @@ -96,17 +97,21 @@ public class TemplateManageService implements TemplateManageApi { DEException.throwException("名称已存在"); } VisualizationTemplateCategory templateCategory = new VisualizationTemplateCategory(); - BeanUtils.copyBean(templateCategory,request); + BeanUtils.copyBean(templateCategory, request); templateCategoryMapper.insert(templateCategory); } else {//模板插入 同名的模板进行覆盖(先删除) + // 分类映射删除 + extTemplateMapper.deleteCategoryMapByTemplate(request.getName(),null); + // 模版删除 QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("name",request.getName()); + wrapper.eq("name", request.getName()); templateMapper.delete(wrapper); + VisualizationTemplate template = new VisualizationTemplate(); - BeanUtils.copyBean(template,request); + BeanUtils.copyBean(template, request); templateMapper.insert(template); // 插入分类关系 - request.getCategories().forEach(categoryId ->{ + request.getCategories().forEach(categoryId -> { VisualizationTemplateCategoryMap categoryMap = new VisualizationTemplateCategoryMap(); categoryMap.setId(UUID.randomUUID().toString()); categoryMap.setCategoryId(categoryId); @@ -122,16 +127,27 @@ public class TemplateManageService implements TemplateManageApi { DEException.throwException("名称已存在"); } VisualizationTemplateCategory templateCategory = new VisualizationTemplateCategory(); - BeanUtils.copyBean(templateCategory,request); + BeanUtils.copyBean(templateCategory, request); templateCategoryMapper.updateById(templateCategory); - }else{ + } else { String nameCheckResult = this.nameCheck(CommonConstants.OPT_TYPE.UPDATE, request.getName(), request.getId()); if (CommonConstants.CHECK_RESULT.EXIST_ALL.equals(nameCheckResult)) { DEException.throwException("名称已存在"); } VisualizationTemplate template = new VisualizationTemplate(); - BeanUtils.copyBean(template,request); + BeanUtils.copyBean(template, request); templateMapper.updateById(template); + //更新分类 + // 分类映射删除 + extTemplateMapper.deleteCategoryMapByTemplate(null,request.getId()); + // 插入分类关系 + request.getCategories().forEach(categoryId -> { + VisualizationTemplateCategoryMap categoryMap = new VisualizationTemplateCategoryMap(); + categoryMap.setId(UUID.randomUUID().toString()); + categoryMap.setCategoryId(categoryId); + categoryMap.setTemplateId(request.getId()); + categoryMapMapper.insert(categoryMap); + }); } } @@ -141,14 +157,14 @@ public class TemplateManageService implements TemplateManageApi { return templateManageDTO; } - //名称检查 - public String nameCheck(String optType, String name,String id) { + //模版名称检查 + public String nameCheck(String optType, String name, String id) { QueryWrapper wrapper = new QueryWrapper<>(); if (CommonConstants.OPT_TYPE.INSERT.equals(optType)) { - wrapper.eq("name",name); + wrapper.eq("name", name); } else if (CommonConstants.OPT_TYPE.UPDATE.equals(optType)) { - wrapper.eq("name",name); - wrapper.ne("id",id); + wrapper.eq("name", name); + wrapper.ne("id", id); } List templateList = templateMapper.selectList(wrapper); if (CollectionUtils.isEmpty(templateList)) { @@ -158,14 +174,25 @@ public class TemplateManageService implements TemplateManageApi { } } - //名称检查 + //分类下模版名称检查 + @Override + public String categoryTemplateNameCheck(TemplateManageRequest request) { + Long result = extTemplateMapper.checkCategoryTemplateName(request.getName(), request.getCategories()); + if (result == 0) { + return CommonConstants.CHECK_RESULT.NONE; + } else { + return CommonConstants.CHECK_RESULT.EXIST_ALL; + } + } + + //分类名称检查 public String categoryNameCheck(String optType, String name, String id) { QueryWrapper wrapper = new QueryWrapper<>(); if (CommonConstants.OPT_TYPE.INSERT.equals(optType)) { - wrapper.eq("name",name); + wrapper.eq("name", name); } else if (CommonConstants.OPT_TYPE.UPDATE.equals(optType)) { - wrapper.eq("name",name); - wrapper.ne("id",id); + wrapper.eq("name", name); + wrapper.ne("id", id); } List templateList = templateCategoryMapper.selectList(wrapper); if (CollectionUtils.isEmpty(templateList)) { @@ -174,31 +201,59 @@ public class TemplateManageService implements TemplateManageApi { return CommonConstants.CHECK_RESULT.EXIST_ALL; } } + @Override public String nameCheck(TemplateManageRequest request) { return nameCheck(request.getOptType(), request.getName(), request.getId()); } + @Override - public void delete(String id) { + public void delete(String id, String categoryId) { Assert.notNull(id, "id cannot be null"); - templateMapper.deleteById(id); + Assert.notNull(categoryId, "categoryId cannot be null"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("template_id", id); + queryWrapper.eq("category_id", categoryId); + categoryMapMapper.delete(queryWrapper); + // 如何是最后一个 则实际模版需要删除 + Long result = extTemplateMapper.checkRepeatTemplateId(categoryId, id); + if (result == 0) { + templateMapper.deleteById(id); + } } + @Override - public void deleteCategory(String id) { + public String deleteCategory(String id) { Assert.notNull(id, "id cannot be null"); - templateCategoryMapper.deleteById(id); + // 该分类下是否有其他分类公用的模版 + + Long checkResult = extTemplateMapper.checkCategoryMap(id); + if (checkResult == 0) { + templateCategoryMapper.deleteById(id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("category_id", id); + categoryMapMapper.delete(queryWrapper); + return "success"; + } else { + return "repeat"; + } } + @Override public VisualizationTemplateVO findOne(String templateId) { VisualizationTemplate template = templateMapper.selectById(templateId); - if(template != null){ + if (template != null) { VisualizationTemplateVO templateVO = new VisualizationTemplateVO(); - BeanUtils.copyBean(templateVO,template); + BeanUtils.copyBean(templateVO, template); + //查找分类 + List categories = extTemplateMapper.findTemplateCategories(templateId); + templateVO.setCategories(categories); return templateVO; - }else{ + } else { return null; } } + @Override public List find(TemplateManageRequest request) { return extTemplateMapper.findTemplateList(request); @@ -208,4 +263,39 @@ public class TemplateManageService implements TemplateManageApi { public List findCategories(TemplateManageRequest request) { return extTemplateMapper.findCategories(request); } + @Override + public void batchUpdate(TemplateManageBatchRequest request) { + request.getTemplateIds().forEach(templateId ->{ + // 分类映射删除 + extTemplateMapper.deleteCategoryMapByTemplate(null,templateId); + // 插入分类关系 + request.getCategories().forEach(categoryId -> { + VisualizationTemplateCategoryMap categoryMap = new VisualizationTemplateCategoryMap(); + categoryMap.setId(UUID.randomUUID().toString()); + categoryMap.setCategoryId(categoryId); + categoryMap.setTemplateId(templateId); + categoryMapMapper.insert(categoryMap); + }); + }); + } + + @Override + public void batchDelete(TemplateManageBatchRequest request) { + request.getTemplateIds().forEach(templateId ->{ + request.getCategories().forEach(categoryId -> { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("template_id", templateId); + queryWrapper.eq("category_id", categoryId); + categoryMapMapper.delete(queryWrapper); + // 如何是最后一个 则实际模版需要删除 + Long result = extTemplateMapper.checkRepeatTemplateId(categoryId, templateId); + if (result == 0) { + templateMapper.deleteById(templateId); + } + }); + + }); + } } + + diff --git a/core/core-backend/src/main/resources/mybatis/ExtVisualizationTemplateMapper.xml b/core/core-backend/src/main/resources/mybatis/ExtVisualizationTemplateMapper.xml index 1746fdfea4..7c18f24e46 100644 --- a/core/core-backend/src/main/resources/mybatis/ExtVisualizationTemplateMapper.xml +++ b/core/core-backend/src/main/resources/mybatis/ExtVisualizationTemplateMapper.xml @@ -3,24 +3,24 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -33,57 +33,55 @@ - vt.id, vt.`name`, vt.pid, vt.`level`,vt.`dv_type`, vt.node_type, vt.create_by, vt.create_time, vt.template_type, vt.snapshot - + vt + . + id + , vt.`name`, vt.pid, vt.`level`,vt.`dv_type`, vt.node_type, vt.create_by, vt.create_time, vt.template_type, vt.snapshot + - ,vt.template_style, vt.template_data, vt.dynamic_data - + ,vt.template_style, vt.template_data, vt.dynamic_data + + + + + + + + + + delete from visualization_template_category_map tcm + + + tcm.template_id in ( + select id from visualization_template vt where vt.name = #{templateName}) + + + + and tcm.template_id = #{templateId} + + + + + diff --git a/core/core-frontend/src/api/template.ts b/core/core-frontend/src/api/template.ts index a9f48b0fe9..7905059df2 100644 --- a/core/core-frontend/src/api/template.ts +++ b/core/core-frontend/src/api/template.ts @@ -7,9 +7,9 @@ export function save(data) { loading: true }) } -export function templateDelete(id) { +export function templateDelete(id, categoryId) { return request.post({ - url: '/templateManage/delete/' + id + url: '/templateManage/delete/' + id + '/' + categoryId }) } @@ -54,3 +54,24 @@ export function nameCheck(data) { data: data }) } + +export function categoryTemplateNameCheck(data) { + return request.post({ + url: '/templateManage/categoryTemplateNameCheck', + data: data + }) +} + +export function batchDelete(data) { + return request.post({ + url: '/templateManage/batchDelete', + data: data + }) +} + +export function batchUpdate(data) { + return request.post({ + url: '/templateManage/batchUpdate', + data: data + }) +} diff --git a/core/core-frontend/src/components/data-visualization/canvas/Shape.vue b/core/core-frontend/src/components/data-visualization/canvas/Shape.vue index 9f3a7e84c7..17f32fea59 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/Shape.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/Shape.vue @@ -49,6 +49,7 @@ :style="getPointStyle(item)" @mousedown="handleMouseDownOnPoint(item, $event)" > +
diff --git a/core/core-frontend/src/views/system/modify-pwd/index.vue b/core/core-frontend/src/views/system/modify-pwd/index.vue new file mode 100644 index 0000000000..8df082459f --- /dev/null +++ b/core/core-frontend/src/views/system/modify-pwd/index.vue @@ -0,0 +1,198 @@ + + + + diff --git a/core/core-frontend/src/views/template/component/DeCategoryChange.vue b/core/core-frontend/src/views/template/component/DeCategoryChange.vue new file mode 100644 index 0000000000..23264445a0 --- /dev/null +++ b/core/core-frontend/src/views/template/component/DeCategoryChange.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/core/core-frontend/src/views/template/component/DeTemplateImport.vue b/core/core-frontend/src/views/template/component/DeTemplateImport.vue index 23053de7fb..ed4eab0f8b 100644 --- a/core/core-frontend/src/views/template/component/DeTemplateImport.vue +++ b/core/core-frontend/src/views/template/component/DeTemplateImport.vue @@ -23,11 +23,7 @@ /> - + +
+
+ 添加分类 +
@@ -48,12 +54,12 @@ diff --git a/core/core-frontend/src/views/template/component/DeTemplateItem.vue b/core/core-frontend/src/views/template/component/DeTemplateItem.vue index c25a7fd4d6..673abdd7d1 100644 --- a/core/core-frontend/src/views/template/component/DeTemplateItem.vue +++ b/core/core-frontend/src/views/template/component/DeTemplateItem.vue @@ -1,19 +1,15 @@