diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java index 4df99ceb75..f2f84c1b5b 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java @@ -68,6 +68,7 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/**/*.json", ANON); filterChainDefinitionMap.put("/system/ui/**", ANON); + filterChainDefinitionMap.put("/system/file/**", ANON); filterChainDefinitionMap.put("/**/*.js", ANON); filterChainDefinitionMap.put("/**/*.css", ANON); filterChainDefinitionMap.put("/**/*.map", ANON); diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelAppTemplateController.java b/backend/src/main/java/io/dataease/controller/panel/PanelAppTemplateController.java new file mode 100644 index 0000000000..a7e709a12b --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/panel/PanelAppTemplateController.java @@ -0,0 +1,66 @@ +package io.dataease.controller.panel; + +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.controller.handler.annotation.I18n; +import io.dataease.controller.request.panel.PanelAppTemplateRequest; +import io.dataease.plugins.common.base.domain.PanelAppTemplate; +import io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs; +import io.dataease.service.panel.PanelAppTemplateService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +@Api(tags = "仪表板:应该关系") +@ApiSupport(order = 170) +@RestController +@RequestMapping("templateApp") +public class PanelAppTemplateController { + + + + @Resource + private PanelAppTemplateService panelAppTemplateService; + + @ApiOperation("查询") + @PostMapping("/find") + @I18n + public List templateAppList(@RequestBody PanelAppTemplateRequest request) { + return panelAppTemplateService.list(request); + } + + @ApiOperation("保存") + @PostMapping("/save") + @I18n + public void save(@RequestBody PanelAppTemplateRequest request) { + panelAppTemplateService.save(request); + } + + @ApiOperation("更新") + @PostMapping("/update") + @I18n + public void update(@RequestBody PanelAppTemplateRequest request) { + panelAppTemplateService.update(request); + } + + @ApiOperation("更新") + @DeleteMapping("/delete/{templateAppId}") + @I18n + public void delete(@PathVariable String templateAppId) { + panelAppTemplateService.delete(templateAppId); + } + + @ApiOperation("名称校验") + @PostMapping("/nameCheck") + @I18n + public String nameCheck(@RequestBody PanelAppTemplateRequest request) { + return panelAppTemplateService.nameCheck(request); + } +} diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java index cb7d2e7ed7..118308fb86 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java @@ -15,6 +15,7 @@ import io.dataease.controller.request.panel.PanelGroupRequest; import io.dataease.controller.request.panel.PanelViewDetailsRequest; import io.dataease.dto.PermissionProxy; import io.dataease.dto.authModel.VAuthModelDTO; +import io.dataease.dto.panel.PanelExport2App; import io.dataease.dto.panel.PanelGroupDTO; import io.dataease.service.panel.PanelGroupService; import io.swagger.annotations.Api; @@ -191,4 +192,8 @@ public class PanelGroupController { public Object findPanelElementInfo(@PathVariable String viewId){ return panelGroupService.findPanelElementInfo(viewId); } + @GetMapping("/export2AppCheck/{panelId}") + public PanelExport2App export2AppCheck(@PathVariable String panelId){ + return panelGroupService.panelExport2AppCheck(panelId); + } } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateRequest.java new file mode 100644 index 0000000000..f4ef20c766 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateRequest.java @@ -0,0 +1,14 @@ +package io.dataease.controller.request.panel; + +import io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs; +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +@Data +public class PanelAppTemplateRequest extends PanelAppTemplateWithBLOBs { + private String optType; +} diff --git a/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java b/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java index 5da168408c..144f12bdd9 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SystemParameterController.java @@ -1,5 +1,6 @@ package io.dataease.controller.sys; +import io.dataease.plugins.common.base.domain.FileMetadata; import io.dataease.plugins.common.base.domain.SystemParameter; import io.dataease.commons.constants.ParamConstants; import io.dataease.controller.sys.response.BasicInfo; @@ -13,16 +14,15 @@ import io.dataease.service.system.EmailService; import io.dataease.service.system.SystemParameterService; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.*; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import java.io.IOException; +import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -108,6 +108,23 @@ public class SystemParameterController { return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } + @GetMapping("/file/down/{fileId}/{fileName}") + public ResponseEntity down(@PathVariable("fileId") String fileId, @PathVariable("fileName") String fileName) throws Exception{ + + FileMetadata fileMetadata = fileService.getFileMetadataById(fileId); + String type = fileMetadata.getType(); + if (!StringUtils.endsWith(fileName.toUpperCase(), type.toUpperCase())) { + fileName += ("." + type); + } + byte[] bytes = fileService.loadFileAsBytes(fileId); + ByteArrayResource bar = new ByteArrayResource(bytes); + final HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); + ContentDisposition contentDisposition = ContentDisposition.parse("attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); + headers.setContentDisposition(contentDisposition); + return new ResponseEntity<>(bar, headers, HttpStatus.OK); + } + @PostMapping(value = "/save/ui", consumes = {"multipart/form-data"}) public void saveUIInfo(@RequestPart("request") Map> systemParameterMap, @RequestPart(value = "files", required = false) List bodyFiles) throws IOException { systemParameterService.saveUIInfo(systemParameterMap, bodyFiles); diff --git a/backend/src/main/java/io/dataease/dto/TaskInstance.java b/backend/src/main/java/io/dataease/dto/TaskInstance.java new file mode 100644 index 0000000000..a17aa68c1f --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/TaskInstance.java @@ -0,0 +1,22 @@ +package io.dataease.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TaskInstance implements Serializable{ + + private String taskId; + + private Long executeTime; + + private Long finishTime; + + private String status; + + private String info; + + private String qrtzInstance; + +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelAppTemplateDTO.java b/backend/src/main/java/io/dataease/dto/panel/PanelAppTemplateDTO.java new file mode 100644 index 0000000000..a5dfdf2ef1 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/PanelAppTemplateDTO.java @@ -0,0 +1,12 @@ +package io.dataease.dto.panel; + +import io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +public class PanelAppTemplateDTO extends PanelAppTemplateWithBLOBs { + +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java b/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java new file mode 100644 index 0000000000..68f3a94270 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java @@ -0,0 +1,61 @@ +package io.dataease.dto.panel; + +import com.alibaba.fastjson.JSON; +import io.dataease.dto.DatasourceDTO; +import io.dataease.dto.dataset.DataSetTaskDTO; +import io.dataease.plugins.common.base.domain.ChartViewField; +import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; +import io.dataease.plugins.common.base.domain.DatasetTable; +import io.dataease.plugins.common.base.domain.DatasetTableField; +import lombok.Data; +import org.apache.commons.lang3.ArrayUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +@Data +public class PanelExport2App { + + private Boolean checkStatus = false; + + private String checkMes; + + private String panelInfo; + + private String chartViewsInfo; + + private String chartViewFieldsInfo; + + private String datasetTablesInfo; + + private String datasetTableFieldsInfo; + + private String dataSetTasksInfo; + + private String datasourceDTOS; + + public PanelExport2App() { + + } + + public PanelExport2App(String checkMes) { + this.checkMes = checkMes; + } + + public PanelExport2App(List chartViewsInfo, List chartViewFieldsInfo, List datasetTablesInfo, List datasetTableFieldsInfo, List dataSetTasksInfo, List datasourceDTOS) { + List empty = new ArrayList(); + this.checkStatus = true; + this.checkMes = "success"; + this.chartViewsInfo = JSON.toJSONString(chartViewsInfo!=null?chartViewsInfo:empty); + this.chartViewFieldsInfo = JSON.toJSONString(chartViewFieldsInfo!=null?chartViewFieldsInfo:empty); + this.datasetTablesInfo = JSON.toJSONString(datasetTablesInfo!=null?datasetTablesInfo:empty); + this.datasetTableFieldsInfo = JSON.toJSONString(datasetTableFieldsInfo!=null?datasetTableFieldsInfo:empty); + this.dataSetTasksInfo = JSON.toJSONString(dataSetTasksInfo!=null?dataSetTasksInfo:empty); + this.datasourceDTOS = JSON.toJSONString(datasourceDTOS!=null?datasourceDTOS:empty); + } +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelGroupAppInfo.java b/backend/src/main/java/io/dataease/dto/panel/PanelGroupAppInfo.java new file mode 100644 index 0000000000..2dd7ff5815 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/PanelGroupAppInfo.java @@ -0,0 +1,25 @@ +package io.dataease.dto.panel; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +@Data +public class PanelGroupAppInfo{ + + private String id; + + private String name; + + private String snapshot; + + private String panelStyle; + + private String panelData; + + private String staticResource; + +} diff --git a/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.java b/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.java new file mode 100644 index 0000000000..1a9ee5c311 --- /dev/null +++ b/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.java @@ -0,0 +1,14 @@ +package io.dataease.ext; + + +import io.dataease.plugins.common.base.domain.ChartViewField; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface ExtChartViewFieldMapper { + List findByPanelId(@Param("panelId") String panelId); + +} diff --git a/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.xml b/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.xml new file mode 100644 index 0000000000..00bd07cc73 --- /dev/null +++ b/backend/src/main/java/io/dataease/ext/ExtChartViewFieldMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java index 8856ff7922..020d0df040 100644 --- a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java @@ -3,6 +3,7 @@ package io.dataease.ext; import io.dataease.controller.request.chart.ChartViewRequest; import io.dataease.dto.chart.ChartViewDTO; import io.dataease.dto.chart.ViewOption; +import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -55,4 +56,7 @@ public interface ExtChartViewMapper { void initPanelChartViewCache(@Param("panelId") String panelId); List chartOptions(@Param("panelId") String panelId); + + List findByPanelId(@Param("panelId") String panelId); + } diff --git a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.xml b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.xml index fbe2da6cb3..2a12627b5e 100644 --- a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.xml @@ -8,6 +8,16 @@ + + + select + dataset_table_field.* + from dataset_table_field + where table_id in ( + SELECT + table_id + FROM + chart_view + WHERE + id IN ( + SELECT + chart_view_id + FROM + panel_view + WHERE + panel_id = #{panelId} + ) + ) + + diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java index 902c39cc91..996038710b 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.java @@ -2,6 +2,7 @@ package io.dataease.ext; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.dataset.DataSetTableDTO; +import io.dataease.plugins.common.base.domain.DatasetTable; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,5 +13,6 @@ public interface ExtDataSetTableMapper { DataSetTableDTO searchOne(DataSetTableRequest request); List searchDataSetTableWithPanelId(@Param("panelId") String panelId, @Param("userId") String userId); + List findByPanelId(@Param("panelId") String panelId); } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml index 2d17d26d03..657c805fdc 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTableMapper.xml @@ -124,4 +124,24 @@ ) + diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java index 2e860bb85f..c0c320d041 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.java @@ -4,6 +4,7 @@ import io.dataease.ext.query.GridExample; import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.dto.dataset.DataSetTaskLogDTO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -22,4 +23,6 @@ public interface ExtDataSetTaskMapper { List userTaskList(GridExample example); List taskWithTriggers(GridExample example); + + List findByPanelId(@Param("panelId") String panelId); } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml index 20295774f3..b073d3c111 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml @@ -94,6 +94,27 @@ + + diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java index 6c519999f9..21ddb7de91 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.java @@ -3,6 +3,7 @@ package io.dataease.ext; import io.dataease.ext.query.GridExample; import io.dataease.controller.request.DatasourceUnionRequest; import io.dataease.dto.DatasourceDTO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,6 +13,9 @@ public interface ExtDataSourceMapper { List queryUnion(DatasourceUnionRequest request); + List findByPanelId(@Param("panelId") String panelId); + + } diff --git a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml index 4202bff325..95b8f716f5 100644 --- a/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtDataSourceMapper.xml @@ -118,5 +118,20 @@ + + diff --git a/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.java b/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.java new file mode 100644 index 0000000000..858dcc781d --- /dev/null +++ b/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.java @@ -0,0 +1,17 @@ +package io.dataease.ext; + +import io.dataease.dto.TaskInstance; + +import java.util.List; + +public interface ExtTaskInstanceMapper { + + int runningCount(String taskId); + + void resetRunnings(String taskId); + + void update(TaskInstance taskInstance); + + List select(); + +} diff --git a/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.xml b/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.xml new file mode 100644 index 0000000000..d099bea160 --- /dev/null +++ b/backend/src/main/java/io/dataease/ext/ExtTaskInstanceMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + update task_instance set status = 'ERROR', info = 'System Interrupt Error' where task_id = #{taskId} and 'RUNNING' + + + + update task_instance + set `task_id` = #{taskId,jdbcType=VARCHAR}, + `execute_time` = #{executeTime,jdbcType=BIGINT}, + `finish_time` = #{finishTime,jdbcType=BIGINT}, + status = #{status,jdbcType=VARCHAR}, + info = #{info,jdbcType=VARCHAR}, + qrtz_instance = #{qrtzInstance,jdbcType=VARCHAR} + where task_id = #{taskId,jdbcType=VARCHAR} + + + + + diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/DsTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/DsTaskHandler.java new file mode 100644 index 0000000000..434d2452fa --- /dev/null +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/DsTaskHandler.java @@ -0,0 +1,101 @@ +package io.dataease.job.sechedule.strategy.impl; + +import com.google.gson.Gson; +import io.dataease.commons.utils.CommonBeanFactory; +import io.dataease.commons.utils.LogUtil; +import io.dataease.dto.TaskInstance; +import io.dataease.ext.ExtTaskInstanceMapper; +import io.dataease.job.sechedule.ScheduleManager; +import io.dataease.job.sechedule.strategy.TaskHandler; +import io.dataease.plugins.common.entity.GlobalTaskEntity; + +import io.dataease.service.datasource.DatasourceService; +import org.quartz.*; + +import org.springframework.stereotype.Service; + +import java.util.Date; + + +@Service("dsTaskHandler") +public class DsTaskHandler extends TaskHandler implements Job { + + private static final String RUNNING = "RUNNING"; + private static final String SUCCESS = "SUCCESS"; + private static final String ERROR = "ERROR"; + + @Override + protected JobDataMap jobDataMap(GlobalTaskEntity taskEntity) { + JobDataMap jobDataMap = new JobDataMap(); + jobDataMap.put("taskEntity", taskEntity); + return jobDataMap; + } + + @Override + public void resetRunningInstance(Long taskId) { + + } + + @Override + protected Boolean taskIsRunning(Long taskId) { + return null; + } + + @Override + public void addTask(ScheduleManager scheduleManager, GlobalTaskEntity taskEntity) throws Exception { + JobKey jobKey = new JobKey(taskEntity.getJobKey()); + TriggerKey triggerKey = new TriggerKey(taskEntity.getJobKey()); + Date start = new Date(taskEntity.getStartTime()); + Date end = null; + Class executor = this.getClass(); + scheduleManager.addOrUpdateCronJob(jobKey, triggerKey, executor, taskEntity.getCron(), start, end, jobDataMap(taskEntity)); + } + + @Override + public void removeTask(ScheduleManager scheduleManager, GlobalTaskEntity taskEntity) { + JobKey jobKey = new JobKey(taskEntity.getJobKey()); + TriggerKey triggerKey = new TriggerKey(taskEntity.getJobKey()); + scheduleManager.removeJob(jobKey, triggerKey); + } + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); + GlobalTaskEntity taskEntity = (GlobalTaskEntity) jobDataMap.get("taskEntity"); + System.out.println(new Gson().toJson(taskEntity)); + taskEntity.getJobKey(); + + if (isRunning(taskEntity.getJobKey())) { + LogUtil.info("Skip synchronization task: {} ,due to task status is {}", taskEntity.getJobKey(), "running"); + return; + } + + LogUtil.info("start check datasource status..."); + TaskInstance taskInstance = new TaskInstance(); + taskInstance.setTaskId("Datasource_check_status"); + taskInstance.setExecuteTime(System.currentTimeMillis()); + taskInstance.setFinishTime(null); + taskInstance.setStatus(RUNNING); + taskInstance.setQrtzInstance(context.getFireInstanceId()); + ExtTaskInstanceMapper extTaskInstanceMapper = CommonBeanFactory.getBean(ExtTaskInstanceMapper.class); + extTaskInstanceMapper.update(taskInstance); + + DatasourceService datasourceService = CommonBeanFactory.getBean(DatasourceService.class); + datasourceService.updateDatasourceStatus(); + + taskInstance.setFinishTime(System.currentTimeMillis()); + taskInstance.setStatus(SUCCESS); + extTaskInstanceMapper.update(taskInstance); + LogUtil.info("end check datasource status."); + + } + + + private Boolean isRunning(String taskId) { + ExtTaskInstanceMapper extTaskInstanceMapper = CommonBeanFactory.getBean(ExtTaskInstanceMapper.class); + System.out.println(extTaskInstanceMapper.runningCount(taskId)); + + return extTaskInstanceMapper.runningCount(taskId) > 0; + } + +} diff --git a/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplate.java b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplate.java new file mode 100644 index 0000000000..fe5f1d7d03 --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplate.java @@ -0,0 +1,29 @@ +package io.dataease.plugins.common.base.domain; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class PanelAppTemplate implements Serializable { + private String id; + + private String name; + + private String nodeType; + + private Integer level; + + private String pid; + + private String version; + + private Long updateTime; + + private String updateUser; + + private Long createTime; + + private String createUser; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateExample.java b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateExample.java new file mode 100644 index 0000000000..aab50aeaca --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateExample.java @@ -0,0 +1,870 @@ +package io.dataease.plugins.common.base.domain; + +import java.util.ArrayList; +import java.util.List; + +public class PanelAppTemplateExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public PanelAppTemplateExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("`name` is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("`name` is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("`name` =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("`name` <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("`name` >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("`name` >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("`name` <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("`name` <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("`name` like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("`name` not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("`name` in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("`name` not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("`name` between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("`name` not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNodeTypeIsNull() { + addCriterion("node_type is null"); + return (Criteria) this; + } + + public Criteria andNodeTypeIsNotNull() { + addCriterion("node_type is not null"); + return (Criteria) this; + } + + public Criteria andNodeTypeEqualTo(String value) { + addCriterion("node_type =", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotEqualTo(String value) { + addCriterion("node_type <>", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeGreaterThan(String value) { + addCriterion("node_type >", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeGreaterThanOrEqualTo(String value) { + addCriterion("node_type >=", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeLessThan(String value) { + addCriterion("node_type <", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeLessThanOrEqualTo(String value) { + addCriterion("node_type <=", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeLike(String value) { + addCriterion("node_type like", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotLike(String value) { + addCriterion("node_type not like", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeIn(List values) { + addCriterion("node_type in", values, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotIn(List values) { + addCriterion("node_type not in", values, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeBetween(String value1, String value2) { + addCriterion("node_type between", value1, value2, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotBetween(String value1, String value2) { + addCriterion("node_type not between", value1, value2, "nodeType"); + return (Criteria) this; + } + + public Criteria andLevelIsNull() { + addCriterion("`level` is null"); + return (Criteria) this; + } + + public Criteria andLevelIsNotNull() { + addCriterion("`level` is not null"); + return (Criteria) this; + } + + public Criteria andLevelEqualTo(Integer value) { + addCriterion("`level` =", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelNotEqualTo(Integer value) { + addCriterion("`level` <>", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelGreaterThan(Integer value) { + addCriterion("`level` >", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelGreaterThanOrEqualTo(Integer value) { + addCriterion("`level` >=", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelLessThan(Integer value) { + addCriterion("`level` <", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelLessThanOrEqualTo(Integer value) { + addCriterion("`level` <=", value, "level"); + return (Criteria) this; + } + + public Criteria andLevelIn(List values) { + addCriterion("`level` in", values, "level"); + return (Criteria) this; + } + + public Criteria andLevelNotIn(List values) { + addCriterion("`level` not in", values, "level"); + return (Criteria) this; + } + + public Criteria andLevelBetween(Integer value1, Integer value2) { + addCriterion("`level` between", value1, value2, "level"); + return (Criteria) this; + } + + public Criteria andLevelNotBetween(Integer value1, Integer value2) { + addCriterion("`level` not between", value1, value2, "level"); + return (Criteria) this; + } + + public Criteria andPidIsNull() { + addCriterion("pid is null"); + return (Criteria) this; + } + + public Criteria andPidIsNotNull() { + addCriterion("pid is not null"); + return (Criteria) this; + } + + public Criteria andPidEqualTo(String value) { + addCriterion("pid =", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidNotEqualTo(String value) { + addCriterion("pid <>", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidGreaterThan(String value) { + addCriterion("pid >", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidGreaterThanOrEqualTo(String value) { + addCriterion("pid >=", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidLessThan(String value) { + addCriterion("pid <", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidLessThanOrEqualTo(String value) { + addCriterion("pid <=", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidLike(String value) { + addCriterion("pid like", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidNotLike(String value) { + addCriterion("pid not like", value, "pid"); + return (Criteria) this; + } + + public Criteria andPidIn(List values) { + addCriterion("pid in", values, "pid"); + return (Criteria) this; + } + + public Criteria andPidNotIn(List values) { + addCriterion("pid not in", values, "pid"); + return (Criteria) this; + } + + public Criteria andPidBetween(String value1, String value2) { + addCriterion("pid between", value1, value2, "pid"); + return (Criteria) this; + } + + public Criteria andPidNotBetween(String value1, String value2) { + addCriterion("pid not between", value1, value2, "pid"); + return (Criteria) this; + } + + public Criteria andVersionIsNull() { + addCriterion("version is null"); + return (Criteria) this; + } + + public Criteria andVersionIsNotNull() { + addCriterion("version is not null"); + return (Criteria) this; + } + + public Criteria andVersionEqualTo(String value) { + addCriterion("version =", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionNotEqualTo(String value) { + addCriterion("version <>", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionGreaterThan(String value) { + addCriterion("version >", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionGreaterThanOrEqualTo(String value) { + addCriterion("version >=", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionLessThan(String value) { + addCriterion("version <", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionLessThanOrEqualTo(String value) { + addCriterion("version <=", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionLike(String value) { + addCriterion("version like", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionNotLike(String value) { + addCriterion("version not like", value, "version"); + return (Criteria) this; + } + + public Criteria andVersionIn(List values) { + addCriterion("version in", values, "version"); + return (Criteria) this; + } + + public Criteria andVersionNotIn(List values) { + addCriterion("version not in", values, "version"); + return (Criteria) this; + } + + public Criteria andVersionBetween(String value1, String value2) { + addCriterion("version between", value1, value2, "version"); + return (Criteria) this; + } + + public Criteria andVersionNotBetween(String value1, String value2) { + addCriterion("version not between", value1, value2, "version"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Long value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Long value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Long value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Long value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Long value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Long value1, Long value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Long value1, Long value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateUserIsNull() { + addCriterion("update_user is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIsNotNull() { + addCriterion("update_user is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserEqualTo(String value) { + addCriterion("update_user =", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserNotEqualTo(String value) { + addCriterion("update_user <>", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserGreaterThan(String value) { + addCriterion("update_user >", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserGreaterThanOrEqualTo(String value) { + addCriterion("update_user >=", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserLessThan(String value) { + addCriterion("update_user <", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserLessThanOrEqualTo(String value) { + addCriterion("update_user <=", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserLike(String value) { + addCriterion("update_user like", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserNotLike(String value) { + addCriterion("update_user not like", value, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserIn(List values) { + addCriterion("update_user in", values, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserNotIn(List values) { + addCriterion("update_user not in", values, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserBetween(String value1, String value2) { + addCriterion("update_user between", value1, value2, "updateUser"); + return (Criteria) this; + } + + public Criteria andUpdateUserNotBetween(String value1, String value2) { + addCriterion("update_user not between", value1, value2, "updateUser"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Long value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Long value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Long value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Long value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Long value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Long value1, Long value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Long value1, Long value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNull() { + addCriterion("create_user is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNotNull() { + addCriterion("create_user is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserEqualTo(String value) { + addCriterion("create_user =", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotEqualTo(String value) { + addCriterion("create_user <>", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThan(String value) { + addCriterion("create_user >", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThanOrEqualTo(String value) { + addCriterion("create_user >=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThan(String value) { + addCriterion("create_user <", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThanOrEqualTo(String value) { + addCriterion("create_user <=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLike(String value) { + addCriterion("create_user like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotLike(String value) { + addCriterion("create_user not like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserIn(List values) { + addCriterion("create_user in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotIn(List values) { + addCriterion("create_user not in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserBetween(String value1, String value2) { + addCriterion("create_user between", value1, value2, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotBetween(String value1, String value2) { + addCriterion("create_user not between", value1, value2, "createUser"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateWithBLOBs.java b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateWithBLOBs.java new file mode 100644 index 0000000000..216c7592db --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/common/base/domain/PanelAppTemplateWithBLOBs.java @@ -0,0 +1,29 @@ +package io.dataease.plugins.common.base.domain; + +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PanelAppTemplateWithBLOBs extends PanelAppTemplate implements Serializable { + private String applicationInfo; + + private String panelInfo; + + private String viewsInfo; + + private String datasetInfo; + + private String datasetFieldsInfo; + + private String datasetTasksInfo; + + private String datasourceInfo; + + private String snapshot; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.java b/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.java new file mode 100644 index 0000000000..bc4dff558c --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.java @@ -0,0 +1,37 @@ +package io.dataease.plugins.common.base.mapper; + +import io.dataease.plugins.common.base.domain.PanelAppTemplate; +import io.dataease.plugins.common.base.domain.PanelAppTemplateExample; +import io.dataease.plugins.common.base.domain.PanelAppTemplateWithBLOBs; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface PanelAppTemplateMapper { + long countByExample(PanelAppTemplateExample example); + + int deleteByExample(PanelAppTemplateExample example); + + int deleteByPrimaryKey(String id); + + int insert(PanelAppTemplateWithBLOBs record); + + int insertSelective(PanelAppTemplateWithBLOBs record); + + List selectByExampleWithBLOBs(PanelAppTemplateExample example); + + List selectByExample(PanelAppTemplateExample example); + + PanelAppTemplateWithBLOBs selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") PanelAppTemplateWithBLOBs record, @Param("example") PanelAppTemplateExample example); + + int updateByExampleWithBLOBs(@Param("record") PanelAppTemplateWithBLOBs record, @Param("example") PanelAppTemplateExample example); + + int updateByExample(@Param("record") PanelAppTemplate record, @Param("example") PanelAppTemplateExample example); + + int updateByPrimaryKeySelective(PanelAppTemplateWithBLOBs record); + + int updateByPrimaryKeyWithBLOBs(PanelAppTemplateWithBLOBs record); + + int updateByPrimaryKey(PanelAppTemplate record); +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.xml b/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.xml new file mode 100644 index 0000000000..5d6f1fe4e3 --- /dev/null +++ b/backend/src/main/java/io/dataease/plugins/common/base/mapper/PanelAppTemplateMapper.xml @@ -0,0 +1,470 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, `name`, node_type, `level`, pid, version, update_time, update_user, create_time, + create_user + + + application_info, panel_info, views_info, dataset_info, dataset_fields_info, dataset_tasks_info, + datasource_info, snapshot + + + + + + delete from panel_app_template + where id = #{id,jdbcType=VARCHAR} + + + delete from panel_app_template + + + + + + insert into panel_app_template (id, `name`, node_type, + `level`, pid, version, + update_time, update_user, create_time, + create_user, application_info, panel_info, + views_info, dataset_info, dataset_fields_info, + dataset_tasks_info, datasource_info, + snapshot) + values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{nodeType,jdbcType=VARCHAR}, + #{level,jdbcType=INTEGER}, #{pid,jdbcType=VARCHAR}, #{version,jdbcType=VARCHAR}, + #{updateTime,jdbcType=BIGINT}, #{updateUser,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, + #{createUser,jdbcType=VARCHAR}, #{applicationInfo,jdbcType=LONGVARCHAR}, #{panelInfo,jdbcType=LONGVARCHAR}, + #{viewsInfo,jdbcType=LONGVARCHAR}, #{datasetInfo,jdbcType=LONGVARCHAR}, #{datasetFieldsInfo,jdbcType=LONGVARCHAR}, + #{datasetTasksInfo,jdbcType=LONGVARCHAR}, #{datasourceInfo,jdbcType=LONGVARCHAR}, + #{snapshot,jdbcType=LONGVARCHAR}) + + + insert into panel_app_template + + + id, + + + `name`, + + + node_type, + + + `level`, + + + pid, + + + version, + + + update_time, + + + update_user, + + + create_time, + + + create_user, + + + application_info, + + + panel_info, + + + views_info, + + + dataset_info, + + + dataset_fields_info, + + + dataset_tasks_info, + + + datasource_info, + + + snapshot, + + + + + #{id,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{nodeType,jdbcType=VARCHAR}, + + + #{level,jdbcType=INTEGER}, + + + #{pid,jdbcType=VARCHAR}, + + + #{version,jdbcType=VARCHAR}, + + + #{updateTime,jdbcType=BIGINT}, + + + #{updateUser,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=BIGINT}, + + + #{createUser,jdbcType=VARCHAR}, + + + #{applicationInfo,jdbcType=LONGVARCHAR}, + + + #{panelInfo,jdbcType=LONGVARCHAR}, + + + #{viewsInfo,jdbcType=LONGVARCHAR}, + + + #{datasetInfo,jdbcType=LONGVARCHAR}, + + + #{datasetFieldsInfo,jdbcType=LONGVARCHAR}, + + + #{datasetTasksInfo,jdbcType=LONGVARCHAR}, + + + #{datasourceInfo,jdbcType=LONGVARCHAR}, + + + #{snapshot,jdbcType=LONGVARCHAR}, + + + + + + update panel_app_template + + + id = #{record.id,jdbcType=VARCHAR}, + + + `name` = #{record.name,jdbcType=VARCHAR}, + + + node_type = #{record.nodeType,jdbcType=VARCHAR}, + + + `level` = #{record.level,jdbcType=INTEGER}, + + + pid = #{record.pid,jdbcType=VARCHAR}, + + + version = #{record.version,jdbcType=VARCHAR}, + + + update_time = #{record.updateTime,jdbcType=BIGINT}, + + + update_user = #{record.updateUser,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=BIGINT}, + + + create_user = #{record.createUser,jdbcType=VARCHAR}, + + + application_info = #{record.applicationInfo,jdbcType=LONGVARCHAR}, + + + panel_info = #{record.panelInfo,jdbcType=LONGVARCHAR}, + + + views_info = #{record.viewsInfo,jdbcType=LONGVARCHAR}, + + + dataset_info = #{record.datasetInfo,jdbcType=LONGVARCHAR}, + + + dataset_fields_info = #{record.datasetFieldsInfo,jdbcType=LONGVARCHAR}, + + + dataset_tasks_info = #{record.datasetTasksInfo,jdbcType=LONGVARCHAR}, + + + datasource_info = #{record.datasourceInfo,jdbcType=LONGVARCHAR}, + + + snapshot = #{record.snapshot,jdbcType=LONGVARCHAR}, + + + + + + + + update panel_app_template + set id = #{record.id,jdbcType=VARCHAR}, + `name` = #{record.name,jdbcType=VARCHAR}, + node_type = #{record.nodeType,jdbcType=VARCHAR}, + `level` = #{record.level,jdbcType=INTEGER}, + pid = #{record.pid,jdbcType=VARCHAR}, + version = #{record.version,jdbcType=VARCHAR}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + update_user = #{record.updateUser,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + create_user = #{record.createUser,jdbcType=VARCHAR}, + application_info = #{record.applicationInfo,jdbcType=LONGVARCHAR}, + panel_info = #{record.panelInfo,jdbcType=LONGVARCHAR}, + views_info = #{record.viewsInfo,jdbcType=LONGVARCHAR}, + dataset_info = #{record.datasetInfo,jdbcType=LONGVARCHAR}, + dataset_fields_info = #{record.datasetFieldsInfo,jdbcType=LONGVARCHAR}, + dataset_tasks_info = #{record.datasetTasksInfo,jdbcType=LONGVARCHAR}, + datasource_info = #{record.datasourceInfo,jdbcType=LONGVARCHAR}, + snapshot = #{record.snapshot,jdbcType=LONGVARCHAR} + + + + + + update panel_app_template + set id = #{record.id,jdbcType=VARCHAR}, + `name` = #{record.name,jdbcType=VARCHAR}, + node_type = #{record.nodeType,jdbcType=VARCHAR}, + `level` = #{record.level,jdbcType=INTEGER}, + pid = #{record.pid,jdbcType=VARCHAR}, + version = #{record.version,jdbcType=VARCHAR}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + update_user = #{record.updateUser,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + create_user = #{record.createUser,jdbcType=VARCHAR} + + + + + + update panel_app_template + + + `name` = #{name,jdbcType=VARCHAR}, + + + node_type = #{nodeType,jdbcType=VARCHAR}, + + + `level` = #{level,jdbcType=INTEGER}, + + + pid = #{pid,jdbcType=VARCHAR}, + + + version = #{version,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=BIGINT}, + + + update_user = #{updateUser,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=BIGINT}, + + + create_user = #{createUser,jdbcType=VARCHAR}, + + + application_info = #{applicationInfo,jdbcType=LONGVARCHAR}, + + + panel_info = #{panelInfo,jdbcType=LONGVARCHAR}, + + + views_info = #{viewsInfo,jdbcType=LONGVARCHAR}, + + + dataset_info = #{datasetInfo,jdbcType=LONGVARCHAR}, + + + dataset_fields_info = #{datasetFieldsInfo,jdbcType=LONGVARCHAR}, + + + dataset_tasks_info = #{datasetTasksInfo,jdbcType=LONGVARCHAR}, + + + datasource_info = #{datasourceInfo,jdbcType=LONGVARCHAR}, + + + snapshot = #{snapshot,jdbcType=LONGVARCHAR}, + + + where id = #{id,jdbcType=VARCHAR} + + + update panel_app_template + set `name` = #{name,jdbcType=VARCHAR}, + node_type = #{nodeType,jdbcType=VARCHAR}, + `level` = #{level,jdbcType=INTEGER}, + pid = #{pid,jdbcType=VARCHAR}, + version = #{version,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=BIGINT}, + update_user = #{updateUser,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + create_user = #{createUser,jdbcType=VARCHAR}, + application_info = #{applicationInfo,jdbcType=LONGVARCHAR}, + panel_info = #{panelInfo,jdbcType=LONGVARCHAR}, + views_info = #{viewsInfo,jdbcType=LONGVARCHAR}, + dataset_info = #{datasetInfo,jdbcType=LONGVARCHAR}, + dataset_fields_info = #{datasetFieldsInfo,jdbcType=LONGVARCHAR}, + dataset_tasks_info = #{datasetTasksInfo,jdbcType=LONGVARCHAR}, + datasource_info = #{datasourceInfo,jdbcType=LONGVARCHAR}, + snapshot = #{snapshot,jdbcType=LONGVARCHAR} + where id = #{id,jdbcType=VARCHAR} + + + update panel_app_template + set `name` = #{name,jdbcType=VARCHAR}, + node_type = #{nodeType,jdbcType=VARCHAR}, + `level` = #{level,jdbcType=INTEGER}, + pid = #{pid,jdbcType=VARCHAR}, + version = #{version,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=BIGINT}, + update_user = #{updateUser,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + create_user = #{createUser,jdbcType=VARCHAR} + where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java new file mode 100644 index 0000000000..101bfd973a --- /dev/null +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendDingtalk.java @@ -0,0 +1,32 @@ +package io.dataease.service.message.service.strategy; + +import io.dataease.auth.entity.SysUserEntity; +import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.xpack.dingtalk.service.DingtalkXpackService; +import io.dataease.service.message.service.SendService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service("sendDingtalk") +public class SendDingtalk implements SendService { + + @Autowired + private AuthUserService authUserService; + + @Override + public void sendMsg(Long userId, Long typeId, String content, String param) { + SysUserEntity userEntity = authUserService.getUserById(userId); + + if (userEntity.getFrom() == 5 && authUserService.supportDingtalk()) { + String username = userEntity.getUsername(); + DingtalkXpackService dingtalkXpackService = SpringContextUtil.getBean(DingtalkXpackService.class); + List userIds = new ArrayList<>(); + userIds.add(username); + dingtalkXpackService.pushMsg(userIds, content); + } + } +} diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java new file mode 100644 index 0000000000..7793d4c7db --- /dev/null +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendLark.java @@ -0,0 +1,32 @@ +package io.dataease.service.message.service.strategy; + +import io.dataease.auth.entity.SysUserEntity; +import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.xpack.lark.service.LarkXpackService; +import io.dataease.service.message.service.SendService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service("sendLark") +public class SendLark implements SendService { + + @Autowired + private AuthUserService authUserService; + + @Override + public void sendMsg(Long userId, Long typeId, String content, String param) { + SysUserEntity userEntity = authUserService.getUserById(userId); + + if (userEntity.getFrom() == 6 && authUserService.supportLark()) { + String username = userEntity.getUsername(); + LarkXpackService larkXpackService = SpringContextUtil.getBean(LarkXpackService.class); + List userIds = new ArrayList<>(); + userIds.add(username); + larkXpackService.pushMsg(userIds, content); + } + } +} diff --git a/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java b/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java new file mode 100644 index 0000000000..de5481b561 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/message/service/strategy/SendWecom.java @@ -0,0 +1,31 @@ +package io.dataease.service.message.service.strategy; + +import io.dataease.auth.entity.SysUserEntity; +import io.dataease.auth.service.AuthUserService; +import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.xpack.wecom.service.WecomXpackService; +import io.dataease.service.message.service.SendService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service("sendWecom") +public class SendWecom implements SendService { + + @Autowired + private AuthUserService authUserService; + @Override + public void sendMsg(Long userId, Long typeId, String content, String param) { + SysUserEntity userEntity = authUserService.getUserById(userId); + + if (userEntity.getFrom() == 4 && authUserService.supportWecom()) { + String username = userEntity.getUsername(); + WecomXpackService wecomXpackService = SpringContextUtil.getBean(WecomXpackService.class); + List userIds = new ArrayList<>(); + userIds.add(username); + wecomXpackService.pushMsg(userIds, content); + } + } +} diff --git a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java new file mode 100644 index 0000000000..1b70204257 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java @@ -0,0 +1,80 @@ +package io.dataease.service.panel; + +import io.dataease.commons.constants.CommonConstants; +import io.dataease.commons.utils.AuthUtils; +import io.dataease.commons.utils.BeanUtils; +import io.dataease.controller.request.panel.PanelAppTemplateRequest; +import io.dataease.controller.request.panel.PanelTemplateRequest; +import io.dataease.dto.panel.PanelAppTemplateDTO; +import io.dataease.plugins.common.base.domain.*; +import io.dataease.plugins.common.base.mapper.PanelAppTemplateMapper; +import org.pentaho.di.core.util.UUIDUtil; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/9/8 + * Description: + */ +@Service +public class PanelAppTemplateService { + + @Resource + private PanelAppTemplateMapper panelAppTemplateMapper; + + public List list(PanelAppTemplateRequest request){ + PanelAppTemplateExample example = new PanelAppTemplateExample(); + example.createCriteria().andPidEqualTo(request.getPid()); + return panelAppTemplateMapper.selectByExampleWithBLOBs(example); + } + + public void save(PanelAppTemplateRequest request){ + request.setId(UUIDUtil.getUUIDAsString()); + request.setCreateUser(AuthUtils.getUser().getUsername()); + request.setCreateTime(System.currentTimeMillis()); + PanelAppTemplateWithBLOBs requestTemplate = new PanelAppTemplateWithBLOBs(); + BeanUtils.copyBean(requestTemplate,request); + panelAppTemplateMapper.insertSelective(requestTemplate); + } + + + public void update(PanelAppTemplateRequest request){ + request.setUpdateUser(AuthUtils.getUser().getUsername()); + request.setUpdateTime(System.currentTimeMillis()); + PanelAppTemplateWithBLOBs requestTemplate = new PanelAppTemplateWithBLOBs(); + BeanUtils.copyBean(requestTemplate,request); + panelAppTemplateMapper.updateByPrimaryKeySelective(requestTemplate); + } + + public void delete(String templateAppId){ + panelAppTemplateMapper.deleteByPrimaryKey(templateAppId); + } + + public String nameCheck(PanelAppTemplateRequest request) { + return nameCheck(request.getOptType(), request.getName(), request.getPid(), request.getId()); + + } + + //名称检查 + public String nameCheck(String optType, String name, String pid, String id) { + PanelAppTemplateExample example = new PanelAppTemplateExample(); + if (CommonConstants.OPT_TYPE.INSERT.equals(optType)) { + example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name); + + } else if (CommonConstants.OPT_TYPE.UPDATE.equals(optType)) { + example.createCriteria().andPidEqualTo(pid).andNameEqualTo(name).andIdNotEqualTo(id); + } + List panelTemplates = panelAppTemplateMapper.selectByExample(example); + if (CollectionUtils.isEmpty(panelTemplates)) { + return CommonConstants.CHECK_RESULT.NONE; + } else { + return CommonConstants.CHECK_RESULT.EXIST_ALL; + } + } + + +} diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 8791b91744..feeb5792fe 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -11,11 +11,15 @@ import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.panel.*; +import io.dataease.dto.DatasourceDTO; import io.dataease.dto.PanelGroupExtendDataDTO; import io.dataease.dto.SysLogDTO; import io.dataease.dto.authModel.VAuthModelDTO; import io.dataease.dto.chart.ChartViewDTO; import io.dataease.dto.dataset.DataSetTableDTO; +import io.dataease.dto.dataset.DataSetTaskDTO; +import io.dataease.dto.panel.PanelExport2App; +import io.dataease.dto.panel.PanelGroupAppInfo; import io.dataease.dto.panel.PanelGroupDTO; import io.dataease.dto.panel.PanelTemplateFileDTO; import io.dataease.dto.panel.po.PanelViewInsertDTO; @@ -106,6 +110,14 @@ public class PanelGroupService { private ExtPanelGroupExtendDataMapper extPanelGroupExtendDataMapper; @Resource private StaticResourceService staticResourceService; + @Resource + private ExtChartViewFieldMapper extChartViewFieldMapper; + @Resource + private ExtDataSetTableFieldMapper extDataSetTableFieldMapper; + @Resource + private ExtDataSetTaskMapper extDataSetTaskMapper; + @Resource + private ExtDataSourceMapper extDataSourceMapper; public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); @@ -402,9 +414,9 @@ public class PanelGroupService { dynamicData = request.getDynamicData(); staticResource = request.getStaticResource(); mobileLayout = panelViewService.havaMobileLayout(templateData); - } else if (PanelConstants.NEW_PANEL_FROM.NEW_MARKET_TEMPLATE.equals(newFrom)){ - PanelTemplateFileDTO templateFileInfo = getTemplateFromMarket(request.getTemplateUrl()); - if(templateFileInfo == null){ + } else if (PanelConstants.NEW_PANEL_FROM.NEW_MARKET_TEMPLATE.equals(newFrom)) { + PanelTemplateFileDTO templateFileInfo = getTemplateFromMarket(request.getTemplateUrl()); + if (templateFileInfo == null) { DataEaseException.throwException("Can't find the template's info from market,please check"); } templateStyle = templateFileInfo.getPanelStyle(); @@ -414,7 +426,7 @@ public class PanelGroupService { mobileLayout = panelViewService.havaMobileLayout(templateData); } Map dynamicDataMap = gson.fromJson(dynamicData, Map.class); - if(dynamicDataMap == null){ + if (dynamicDataMap == null) { DataEaseException.throwException("Please use the template after v1.9"); } @@ -588,15 +600,15 @@ public class PanelGroupService { cell.setCellStyle(cellStyle); //设置列的宽度 detailsSheet.setColumnWidth(j, 255 * 20); - }else{ + } else { // with DataType - if((excelTypes[j]== DeTypeConstants.DE_INT || excelTypes[j]== DeTypeConstants.DE_FLOAT)&& StringUtils.isNotEmpty(rowData[j])){ - try{ + if ((excelTypes[j] == DeTypeConstants.DE_INT || excelTypes[j] == DeTypeConstants.DE_FLOAT) && StringUtils.isNotEmpty(rowData[j])) { + try { cell.setCellValue(Double.valueOf(rowData[j])); - }catch (Exception e){ + } catch (Exception e) { LogUtil.warn("export excel data transform error"); } - }else{ + } else { cell.setCellValue(rowData[j]); } } @@ -631,7 +643,7 @@ public class PanelGroupService { String viewId = request.getViewId(); ChartViewWithBLOBs chartViewWithBLOBs = chartViewService.get(viewId); String pid = chartViewWithBLOBs.getSceneId(); - DeLogUtils.save(SysLogConstants.OPERATE_TYPE.EXPORT, SysLogConstants.SOURCE_TYPE.VIEW, viewId,pid, null, null); + DeLogUtils.save(SysLogConstants.OPERATE_TYPE.EXPORT, SysLogConstants.SOURCE_TYPE.VIEW, viewId, pid, null, null); } } @@ -645,54 +657,55 @@ public class PanelGroupService { } - public PanelTemplateFileDTO getTemplateFromMarket(String templateUrl){ - if(StringUtils.isNotEmpty(templateUrl)){ + public PanelTemplateFileDTO getTemplateFromMarket(String templateUrl) { + if (StringUtils.isNotEmpty(templateUrl)) { Gson gson = new Gson(); - String templateInfo = HttpClientUtil.get(templateUrl,null); + String templateInfo = HttpClientUtil.get(templateUrl, null); return gson.fromJson(templateInfo, PanelTemplateFileDTO.class); - }else{ + } else { return null; } } /** * @Description: Automatically save panel data to cache when editing - * */ - public void autoCache(PanelGroupRequest request){ - String cacheName = JdbcConstants.PANEL_CACHE_KEY+request.getId(); - String cacheId = AuthUtils.getUser().getUserId()+"&"+request.getId(); + */ + public void autoCache(PanelGroupRequest request) { + String cacheName = JdbcConstants.PANEL_CACHE_KEY + request.getId(); + String cacheId = AuthUtils.getUser().getUserId() + "&" + request.getId(); CacheUtils.put(cacheName, cacheId, request, null, null); } /** * @Description: Remove panel cache for specific user - * */ - public void removePanelCache(String panelId){ - String cacheName = JdbcConstants.PANEL_CACHE_KEY+panelId; - String cacheId = AuthUtils.getUser().getUserId()+"&"+panelId; - CacheUtils.remove(cacheName,cacheId); + */ + public void removePanelCache(String panelId) { + String cacheName = JdbcConstants.PANEL_CACHE_KEY + panelId; + String cacheId = AuthUtils.getUser().getUserId() + "&" + panelId; + CacheUtils.remove(cacheName, cacheId); } - public void removePanelAllCache(String panelId){ - String cacheName = JdbcConstants.PANEL_CACHE_KEY+panelId; + public void removePanelAllCache(String panelId) { + String cacheName = JdbcConstants.PANEL_CACHE_KEY + panelId; CacheUtils.removeAll(cacheName); } - public PanelGroupDTO findUserPanelCache(String panelId){ - String cacheName = JdbcConstants.PANEL_CACHE_KEY+panelId; - String cacheId = AuthUtils.getUser().getUserId()+"&"+panelId; - Object cache = CacheUtils.get(cacheName,cacheId); - if(cache==null){ + public PanelGroupDTO findUserPanelCache(String panelId) { + String cacheName = JdbcConstants.PANEL_CACHE_KEY + panelId; + String cacheId = AuthUtils.getUser().getUserId() + "&" + panelId; + Object cache = CacheUtils.get(cacheName, cacheId); + if (cache == null) { return null; - }else{ - return (PanelGroupRequest)cache; + } else { + return (PanelGroupRequest) cache; } } - public Boolean checkUserCache(String panelId){ - String cacheName = JdbcConstants.PANEL_CACHE_KEY+panelId; - String cacheId = AuthUtils.getUser().getUserId()+"&"+panelId; - Object cache = CacheUtils.get(cacheName,cacheId); - return cache!=null; + + public Boolean checkUserCache(String panelId) { + String cacheName = JdbcConstants.PANEL_CACHE_KEY + panelId; + String cacheId = AuthUtils.getUser().getUserId() + "&" + panelId; + Object cache = CacheUtils.get(cacheName, cacheId); + return cache != null; } public void viewLog(PanelViewLogRequest request) { @@ -706,15 +719,15 @@ public class PanelGroupService { DeLogUtils.save(operateType, sourceType, panelId, panel.getPid(), null, null); } - public Object findPanelElementInfo(String viewId){ + public Object findPanelElementInfo(String viewId) { PanelView panelView = panelViewService.findByViewId(viewId); - if(panelView!=null){ + if (panelView != null) { PanelGroupWithBLOBs panelGroupWithBLOBs = panelGroupMapper.selectByPrimaryKey(panelView.getPanelId()); - if(panelGroupWithBLOBs != null){ - JSONArray panelData = JSONObject.parseArray(panelGroupWithBLOBs.getPanelData()); - for(int i = 0;i chartViewsInfo = panelViewService.findByPanelId(panelId); + //TODO 2.获取视图扩展字段信息 + List chartViewFieldsInfo = extChartViewFieldMapper.findByPanelId(panelId); + //TODO 3.获取所有数据集信息 + List datasetTablesInfo = extDataSetTableMapper.findByPanelId(panelId); + //TODO 4.获取所有数据集字段信息 + List datasetTableFieldsInfo = extDataSetTableFieldMapper.findByPanelId(panelId); + //TODO 5.获取所有任务信息 + List dataSetTasksInfo = extDataSetTaskMapper.findByPanelId(panelId); + //TODO 6.获取所有数据源信息 + List datasourceDTOS = extDataSourceMapper.findByPanelId(panelId); + + //校验标准 1.存在视图且所有视图的数据来源必须是dataset 2.存在数据集且没有excel数据集 3.存在数据源且是单数据源 + //1.view check + if (CollectionUtils.isEmpty(chartViewsInfo)) { + return new PanelExport2App("this panel don't have views"); + } else if (chartViewsInfo.stream().filter(chartView -> chartView.getDataFrom().equals("template")).collect(Collectors.toList()).size() > 0) { + return new PanelExport2App("this panel have view from template"); + } + + // dataset check + if (CollectionUtils.isEmpty(datasetTablesInfo)) { + return new PanelExport2App("this panel don't have dataset"); + } else if (datasetTablesInfo.stream().filter(datasetTable -> datasetTable.getType().equals("excel")).collect(Collectors.toList()).size() > 0) { + return new PanelExport2App("this panel have dataset witch type is excel"); + } + + //datasource check + if (CollectionUtils.isEmpty(datasourceDTOS)) { + return new PanelExport2App("this panel don't have datasource"); + } else if (datasourceDTOS.size() > 1) { + return new PanelExport2App("this panel should hava only one dataset"); + } + return new PanelExport2App(chartViewsInfo, chartViewFieldsInfo, datasetTablesInfo, datasetTableFieldsInfo, dataSetTasksInfo, datasourceDTOS); + } + + public void appApply(PanelExport2App appApplyInfo){ + + } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java index 6dabb1229b..3a788e4605 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java @@ -11,6 +11,7 @@ import io.dataease.dto.panel.PanelViewDto; import io.dataease.dto.panel.PanelViewTableDTO; import io.dataease.dto.panel.po.PanelViewInsertDTO; import io.dataease.dto.panel.po.PanelViewPo; +import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.PanelGroupWithBLOBs; import io.dataease.plugins.common.base.domain.PanelView; import io.dataease.plugins.common.base.domain.PanelViewExample; @@ -168,4 +169,8 @@ public class PanelViewService { return null; } } + + public List findByPanelId(String panelId) { + return extChartViewMapper.findByPanelId(panelId); + } } diff --git a/backend/src/main/resources/db/migration/V40__1.15.sql b/backend/src/main/resources/db/migration/V40__1.15.sql index 3df26b9c03..abc372af1a 100644 --- a/backend/src/main/resources/db/migration/V40__1.15.sql +++ b/backend/src/main/resources/db/migration/V40__1.15.sql @@ -9,7 +9,6 @@ CREATE TABLE `sys_external_token` ( UPDATE `sys_menu` set `component` = 'system/datasource/DsForm' where `component` = 'system/datasource/form'; - INSERT INTO `system_parameter`(`param_key`, `param_value`, `type`, `sort`) VALUES ('basic.dsCheckInterval', 20, 'text', 1); INSERT INTO `system_parameter`(`param_key`, `param_value`, `type`, `sort`) VALUES ('basic.dsCheckIntervalType', 'minute', 'text', 1); @@ -25,3 +24,37 @@ CREATE TABLE `task_instance` ( INSERT INTO `task_instance` (`task_id`) VALUES ('Datasource_check_status'); +INSERT INTO `sys_menu` (`menu_id`, `pid`, `sub_count`, `type`, `title`, `name`, `component`, `menu_sort`, `icon`, `path`, `i_frame`, `cache`, `hidden`, `permission`, `create_by`, `update_by`, `create_time`, `update_time`) VALUES (41, 1, 1, 1, '应用管理', 'system-template-app', 'panel/templateApp/index', 13, 'display-setting', 'panel/templateApp/index', 0, 0, 0, 'template:read', NULL, NULL, NULL, 1620444227389); + +DROP TABLE IF EXISTS `panel_app_template`; +CREATE TABLE `panel_app_template` ( + `id` varchar(50) NOT NULL, + `name` varchar(255) DEFAULT NULL COMMENT '名称', + `node_type` varchar(255) DEFAULT NULL COMMENT '节点类型', + `level` int(8) DEFAULT NULL, + `pid` varchar(255) DEFAULT NULL COMMENT '父级ID', + `version` varchar(255) DEFAULT NULL COMMENT '版本', + `application_info` longtext COMMENT '应用信息', + `panel_info` longtext COMMENT '仪表板信息', + `views_info` longtext COMMENT '视图信息', + `dataset_info` longtext COMMENT '数据集信息', + `dataset_fields_info` longtext COMMENT '数据集字段信息', + `dataset_tasks_info` longtext COMMENT '数据集任务信息', + `datasource_info` longtext COMMENT '数据源信息', + `snapshot` longtext, + `update_time` bigint(13) DEFAULT NULL, + `update_user` varchar(255) DEFAULT NULL, + `create_time` bigint(13) DEFAULT NULL, + `create_user` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `sys_menu` VALUES (800, 0, 0, 1, '数据集表单', 'dataset-form', 'dataset/form', 999, NULL, '/dataset-form', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); + +INSERT INTO `sys_msg_channel` VALUES (3, 'webmsg.channel_wecom_msg', 'sendWecom'); +INSERT INTO `sys_msg_channel` VALUES (4, 'webmsg.channel_dingtalk_msg', 'sendDingtalk'); +INSERT INTO `sys_msg_channel` VALUES (5, 'webmsg.channel_lark_msg', 'sendLark'); + +UPDATE `dataset_table_function` SET `func` = 'CONCAT(s1,s2,...)' WHERE `id` = 29; +UPDATE `dataset_table_function` SET `func` = 'CONCAT(s1,s2,...)' WHERE `id` = 78; + diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index 3a22039abe..0c95002c42 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -63,8 +63,8 @@ - -
+
+ diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 781b17971b..034bab0a46 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -84,7 +84,7 @@ i18n_cst_ds_tb_or_field_deleted=Custom dataset union data is deleted or field ch i18n_no_all_delete_privilege_folder=This folder have sources which have no manage or view privilege,Can Not Be Deleted. i18n_excel_field_repeat=Duplicate fields exist, please modify and try again. i18n_schema_is_empty=Database schema is empty -\u7AD9\u5185\u6D88\u606F=Internal Messages +\u7AD9\u5185\u6D88\u606F=Messages Center \u6240\u6709\u6D88\u606F=All Messages \u672A\u8BFB\u6D88\u606F=Unread Messages \u5DF2\u8BFB\u6D88\u606F==Read Messages diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 45b685e32c..6aa870b885 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -84,7 +84,7 @@ i18n_cst_ds_tb_or_field_deleted=\u81EA\u5B9A\u4E49\u6570\u636E\u96C6\u6240\u5173 i18n_no_all_delete_privilege_folder=\u8BE5\u76EE\u5F55\u4E0B\u5B58\u5728\u6CA1\u6709\u7BA1\u7406\u6743\u9650\u6216\u67E5\u770B\u6743\u9650\u7684\u8D44\u6E90\uFF0C\u65E0\u6CD5\u5220\u9664 i18n_excel_field_repeat=\u5B58\u5728\u91CD\u590D\u5B57\u6BB5\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 i18n_schema_is_empty=\u6570\u636E\u5E93 Schema \u4E3A\u7A7A -\u7AD9\u5185\u6D88\u606F=\u7AD9\u5185\u6D88\u606F +\u7AD9\u5185\u6D88\u606F=\u6D88\u606F\u4E2D\u5FC3 \u6240\u6709\u6D88\u606F=\u6240\u6709\u6D88\u606F \u672A\u8BFB\u6D88\u606F=\u672A\u8BFB\u6D88\u606F \u5DF2\u8BFB\u6D88\u606F=\u5DF2\u8BFB\u6D88\u606F @@ -219,5 +219,5 @@ I18N_USER_DONOT_EXIST=\u7528\u6237\u4E0D\u5B58\u5728 I18N_USER_SOURCE_PWD_ERROR=\u539F\u59CB\u5BC6\u7801\u9519\u8BEF I18N_USER_PWD_FORMAT_ERROR=\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF -I18N_DS_INVALID=数据源无效. -I18N_DS_INVALID_TABLE=数据源中有无效的表 \ No newline at end of file +I18N_DS_INVALID=\u6570\u636E\u6E90\u65E0\u6548. +I18N_DS_INVALID_TABLE=\u6570\u636E\u6E90\u4E2D\u6709\u65E0\u6548\u7684\u8868 \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 9e15e5ba61..d8fff127a1 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -84,7 +84,7 @@ i18n_cst_ds_tb_or_field_deleted=\u81EA\u5B9A\u7FA9\u6578\u64DA\u96C6\u6240\u95DC i18n_no_all_delete_privilege_folder=\u8A72\u76EE\u9304\u4E0B\u5B58\u5728\u6C92\u6709\u7BA1\u7406\u6B0A\u9650\u6216\u67E5\u770B\u6B0A\u9650\u7684\u8CC7\u6E90\uFF0C\u7121\u6CD5\u522A\u9664 i18n_excel_field_repeat=\u5B58\u5728\u91CD\u5FA9\u5B57\u6BB5\uFF0C\u8ACB\u4FEE\u6539\u5F8C\u91CD\u8BD5 i18n_schema_is_empty=\u6578\u64DA\u5EAB Schema \u70BA\u7A7A -\u7AD9\u5185\u6D88\u606F=\u7AD9\u5167\u6D88\u606F +\u7AD9\u5185\u6D88\u606F=\u6D88\u606F\u4E2D\u5FC3 \u6240\u6709\u6D88\u606F=\u6240\u6709\u6D88\u606F \u672A\u8BFB\u6D88\u606F=\u672A\u8B80\u6D88\u606F \u5DF2\u8BFB\u6D88\u606F=\u5DF2\u8B80\u6D88\u606F @@ -215,5 +215,5 @@ I18N_USER_DONOT_EXIST=\u7528\u6236\u4E0D\u5B58\u5728 I18N_USER_SOURCE_PWD_ERROR=\u539F\u59CB\u5BC6\u78BC\u932F\u8AA4 I18N_USER_PWD_FORMAT_ERROR=\u5BC6\u78BC\u683C\u5F0F\u932F\u8AA4 -I18N_DS_INVALID=數據源無效. -I18N_DS_INVALID_TABLE=數據源中有無效的表 \ No newline at end of file +I18N_DS_INVALID=\u6578\u64DA\u6E90\u7121\u6548. +I18N_DS_INVALID_TABLE=\u6578\u64DA\u6E90\u4E2D\u6709\u7121\u6548\u7684\u8868 \ No newline at end of file diff --git a/frontend/src/api/panel/panel.js b/frontend/src/api/panel/panel.js index fa269dbc94..0b5a510ba1 100644 --- a/frontend/src/api/panel/panel.js +++ b/frontend/src/api/panel/panel.js @@ -299,3 +299,11 @@ export function findPanelElementInfo(viewId) { loading: false }) } + +export function export2AppCheck(panelId){ + return request({ + url: 'panel/group/export2AppCheck/'+panelId, + method: 'get', + loading: false + }) +} diff --git a/frontend/src/api/system/templateApp.js b/frontend/src/api/system/templateApp.js new file mode 100644 index 0000000000..58b05a720f --- /dev/null +++ b/frontend/src/api/system/templateApp.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +export function save(data) { + return request({ + url: '/templateApp/save', + data: data, + method: 'post', + loading: true + }) +} +export function templateDelete(id) { + return request({ + url: '/templateApp/delete/' + id, + method: 'delete' + }) +} + +export function showtemplateAppList(data) { + return request({ + url: '/templateApp/templateAppList', + data: data, + method: 'post' + }) +} + +export function findOne(id) { + return request({ + url: '/templateApp/findOne/' + id, + method: 'get' + }) +} + +export function find(data) { + return request({ + url: '/templateApp/find', + data: data, + loading: true, + method: 'post' + }) +} + +export function nameCheck(data) { + return request({ + url: '/templateApp/nameCheck', + data: data, + method: 'post' + }) +} diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index bba26d4a95..ec176fbeb4 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1840,6 +1840,7 @@ export default { sys_template: 'System Template', user_template: 'User Template', add_category: 'Add Category', + add_app_category: 'Add App Category', filter_keywords: 'Enter keywords to filter', dashboard_theme: 'Dashboard Theme', table: 'Table', @@ -1859,6 +1860,7 @@ export default { export_to_panel: 'Export to template', export_to_pdf: 'Export to PDF', export_to_img: 'Export to Image', + export_to_app: 'Export to App', preview: 'Preview', fullscreen_preview: 'Fullscreen Preview', new_tab_preview: 'New Tab Preview', @@ -2221,8 +2223,11 @@ export default { i18n_msg_type_dataset_sync_faild: 'Dataset synchronization failed', i18n_msg_type_all: 'All type', i18n_msg_type_ds_invalid: 'Datasource invalid', - channel_inner_msg: 'On site news', - channel_email_msg: 'Mail notification' + channel_inner_msg: 'On site', + channel_email_msg: 'Email', + channel_wecom_msg: 'Wecom', + channel_dingtalk_msg: 'Dingtalk', + channel_lark_msg: 'Lark' }, denumberrange: { label: 'Number range', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index adf4c46c5d..f86590356e 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1840,6 +1840,7 @@ export default { sys_template: '繫統模闆', user_template: '用戶模闆', add_category: '添加分類', + add_app_category: '添加应用分類', filter_keywords: '輸入關鍵字進行過濾', dashboard_theme: '儀錶闆主題', table: '錶格', @@ -1859,6 +1860,7 @@ export default { export_to_panel: '導出爲模闆', export_to_pdf: '導出爲PDF', export_to_img: '導出爲圖片', + export_to_app: '導出爲应用', preview: '預覽', fullscreen_preview: '全屏預覽', new_tab_preview: '新Tab頁預覽', @@ -2223,7 +2225,10 @@ export default { i18n_msg_type_ds_invalid: '數據源失效', i18n_msg_type_all: '全部類型', channel_inner_msg: '站內消息', - channel_email_msg: '郵件提醒' + channel_email_msg: '郵件提醒', + channel_wecom_msg: '企業微信', + channel_dingtalk_msg: '釘釘提醒', + channel_lark_msg: '飛書提醒' }, denumberrange: { label: '數值區間', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 4347ac11ec..9d05b69a85 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1840,6 +1840,7 @@ export default { sys_template: '系统模板', user_template: '用户模板', add_category: '添加分类', + add_app_category: '添加应用分类', filter_keywords: '输入关键字进行过滤', dashboard_theme: '仪表板主题', table: '表格', @@ -1859,6 +1860,7 @@ export default { export_to_panel: '导出为模板', export_to_pdf: '导出为PDF', export_to_img: '导出为图片', + export_to_app: '导出为应用', preview: '预览', fullscreen_preview: '全屏预览', new_tab_preview: '新Tab页预览', @@ -2223,7 +2225,10 @@ export default { i18n_msg_type_ds_invalid: '数据源失效', i18n_msg_type_all: '全部类型', channel_inner_msg: '站内消息', - channel_email_msg: '邮件提醒' + channel_email_msg: '邮件提醒', + channel_wecom_msg: '企业微信', + channel_dingtalk_msg: '钉钉提醒', + channel_lark_msg: '飞书提醒' }, denumberrange: { label: '数值区间', diff --git a/frontend/src/store/modules/permission.js b/frontend/src/store/modules/permission.js index b39b50c358..0b8a18edd3 100644 --- a/frontend/src/store/modules/permission.js +++ b/frontend/src/store/modules/permission.js @@ -29,7 +29,7 @@ const actions = { commit('SET_CURRENT_PATH', path) } } -export const fullScreenRouters = ['XpackThemeForm', 'system/datasource/DsForm'] +export const fullScreenRouters = ['XpackThemeForm', 'system/datasource/DsForm', 'dataset/form'] export const filterAsyncRouter = (routers) => { // 遍历后台传来的路由字符串,转换为组件对象 return routers.map(router => { if (!fullScreenRouters.includes(router.component) && router.type === 1 && router.pid === 0 && router.component && router.component !== 'Layout') { diff --git a/frontend/src/styles/deicon/demo_index.html b/frontend/src/styles/deicon/demo_index.html index a779f9a1a8..767b048576 100644 --- a/frontend/src/styles/deicon/demo_index.html +++ b/frontend/src/styles/deicon/demo_index.html @@ -3,8 +3,8 @@ iconfont Demo - - + + @@ -54,6 +54,12 @@
    +
  • + +
    application
    +
    &#xe89e;
    +
  • +
  • data-source-24
    @@ -780,9 +786,9 @@
    @font-face {
       font-family: 'iconfont';
    -  src: url('iconfont.woff2?t=1660024163434') format('woff2'),
    -       url('iconfont.woff?t=1660024163434') format('woff'),
    -       url('iconfont.ttf?t=1660024163434') format('truetype');
    +  src: url('iconfont.woff2?t=1662616551987') format('woff2'),
    +       url('iconfont.woff?t=1662616551987') format('woff'),
    +       url('iconfont.ttf?t=1662616551987') format('truetype');
     }
     

    第二步:定义使用 iconfont 的样式

    @@ -808,6 +814,15 @@
      +
    • + +
      + application +
      +
      .icon-application +
      +
    • +
    • @@ -1897,6 +1912,14 @@
        +
      • + +
        application
        +
        #icon-application
        +
      • +
      • {{ $t('chart.field_fixed') }} + {{ $t('chart.field_dynamic') }} - + {{ item.value }} + + {{ item.curField.name + '(' + $t('chart.' + item.summary) + ')' }} + @@ -34,7 +38,7 @@ width="70%" class="dialog-css" > - +