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 ee7911dd2c..954a6f7266 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 @@ -46,6 +46,10 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/system/ui/**", ANON); + filterChainDefinitionMap.put("/**/*.js", ANON); + filterChainDefinitionMap.put("/**/*.css", ANON); + filterChainDefinitionMap.put("/**/*.map", ANON); + // filterChainDefinitionMap.put("/axios.map", ANON); filterChainDefinitionMap.put("/api/auth/login", ANON); filterChainDefinitionMap.put("/api/auth/logout", ANON); diff --git a/backend/src/main/java/io/dataease/base/domain/PanelView.java b/backend/src/main/java/io/dataease/base/domain/PanelView.java new file mode 100644 index 0000000000..0f323c61af --- /dev/null +++ b/backend/src/main/java/io/dataease/base/domain/PanelView.java @@ -0,0 +1,25 @@ +package io.dataease.base.domain; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class PanelView implements Serializable { + private String id; + + private String panelId; + + private String chartViewId; + + private String createBy; + + private Long createTime; + + private String updateBy; + + private Long updateTime; + + private byte[] content; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/PanelViewExample.java b/backend/src/main/java/io/dataease/base/domain/PanelViewExample.java new file mode 100644 index 0000000000..259289685b --- /dev/null +++ b/backend/src/main/java/io/dataease/base/domain/PanelViewExample.java @@ -0,0 +1,670 @@ +package io.dataease.base.domain; + +import java.util.ArrayList; +import java.util.List; + +public class PanelViewExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public PanelViewExample() { + 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 andPanelIdIsNull() { + addCriterion("panel_id is null"); + return (Criteria) this; + } + + public Criteria andPanelIdIsNotNull() { + addCriterion("panel_id is not null"); + return (Criteria) this; + } + + public Criteria andPanelIdEqualTo(String value) { + addCriterion("panel_id =", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdNotEqualTo(String value) { + addCriterion("panel_id <>", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdGreaterThan(String value) { + addCriterion("panel_id >", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdGreaterThanOrEqualTo(String value) { + addCriterion("panel_id >=", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdLessThan(String value) { + addCriterion("panel_id <", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdLessThanOrEqualTo(String value) { + addCriterion("panel_id <=", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdLike(String value) { + addCriterion("panel_id like", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdNotLike(String value) { + addCriterion("panel_id not like", value, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdIn(List values) { + addCriterion("panel_id in", values, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdNotIn(List values) { + addCriterion("panel_id not in", values, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdBetween(String value1, String value2) { + addCriterion("panel_id between", value1, value2, "panelId"); + return (Criteria) this; + } + + public Criteria andPanelIdNotBetween(String value1, String value2) { + addCriterion("panel_id not between", value1, value2, "panelId"); + return (Criteria) this; + } + + public Criteria andChartViewIdIsNull() { + addCriterion("chart_view_id is null"); + return (Criteria) this; + } + + public Criteria andChartViewIdIsNotNull() { + addCriterion("chart_view_id is not null"); + return (Criteria) this; + } + + public Criteria andChartViewIdEqualTo(String value) { + addCriterion("chart_view_id =", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdNotEqualTo(String value) { + addCriterion("chart_view_id <>", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdGreaterThan(String value) { + addCriterion("chart_view_id >", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdGreaterThanOrEqualTo(String value) { + addCriterion("chart_view_id >=", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdLessThan(String value) { + addCriterion("chart_view_id <", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdLessThanOrEqualTo(String value) { + addCriterion("chart_view_id <=", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdLike(String value) { + addCriterion("chart_view_id like", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdNotLike(String value) { + addCriterion("chart_view_id not like", value, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdIn(List values) { + addCriterion("chart_view_id in", values, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdNotIn(List values) { + addCriterion("chart_view_id not in", values, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdBetween(String value1, String value2) { + addCriterion("chart_view_id between", value1, value2, "chartViewId"); + return (Criteria) this; + } + + public Criteria andChartViewIdNotBetween(String value1, String value2) { + addCriterion("chart_view_id not between", value1, value2, "chartViewId"); + return (Criteria) this; + } + + public Criteria andCreateByIsNull() { + addCriterion("create_by is null"); + return (Criteria) this; + } + + public Criteria andCreateByIsNotNull() { + addCriterion("create_by is not null"); + return (Criteria) this; + } + + public Criteria andCreateByEqualTo(String value) { + addCriterion("create_by =", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotEqualTo(String value) { + addCriterion("create_by <>", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThan(String value) { + addCriterion("create_by >", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThanOrEqualTo(String value) { + addCriterion("create_by >=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThan(String value) { + addCriterion("create_by <", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThanOrEqualTo(String value) { + addCriterion("create_by <=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLike(String value) { + addCriterion("create_by like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotLike(String value) { + addCriterion("create_by not like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByIn(List values) { + addCriterion("create_by in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotIn(List values) { + addCriterion("create_by not in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByBetween(String value1, String value2) { + addCriterion("create_by between", value1, value2, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotBetween(String value1, String value2) { + addCriterion("create_by not between", value1, value2, "createBy"); + 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 andUpdateByIsNull() { + addCriterion("update_by is null"); + return (Criteria) this; + } + + public Criteria andUpdateByIsNotNull() { + addCriterion("update_by is not null"); + return (Criteria) this; + } + + public Criteria andUpdateByEqualTo(String value) { + addCriterion("update_by =", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotEqualTo(String value) { + addCriterion("update_by <>", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThan(String value) { + addCriterion("update_by >", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThanOrEqualTo(String value) { + addCriterion("update_by >=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThan(String value) { + addCriterion("update_by <", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThanOrEqualTo(String value) { + addCriterion("update_by <=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLike(String value) { + addCriterion("update_by like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotLike(String value) { + addCriterion("update_by not like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByIn(List values) { + addCriterion("update_by in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotIn(List values) { + addCriterion("update_by not in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByBetween(String value1, String value2) { + addCriterion("update_by between", value1, value2, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotBetween(String value1, String value2) { + addCriterion("update_by not between", value1, value2, "updateBy"); + 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 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/base/mapper/PanelViewMapper.java b/backend/src/main/java/io/dataease/base/mapper/PanelViewMapper.java new file mode 100644 index 0000000000..1020b9d4a7 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/PanelViewMapper.java @@ -0,0 +1,36 @@ +package io.dataease.base.mapper; + +import io.dataease.base.domain.PanelView; +import io.dataease.base.domain.PanelViewExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface PanelViewMapper { + long countByExample(PanelViewExample example); + + int deleteByExample(PanelViewExample example); + + int deleteByPrimaryKey(String id); + + int insert(PanelView record); + + int insertSelective(PanelView record); + + List selectByExampleWithBLOBs(PanelViewExample example); + + List selectByExample(PanelViewExample example); + + PanelView selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") PanelView record, @Param("example") PanelViewExample example); + + int updateByExampleWithBLOBs(@Param("record") PanelView record, @Param("example") PanelViewExample example); + + int updateByExample(@Param("record") PanelView record, @Param("example") PanelViewExample example); + + int updateByPrimaryKeySelective(PanelView record); + + int updateByPrimaryKeyWithBLOBs(PanelView record); + + int updateByPrimaryKey(PanelView record); +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelViewMapper.xml new file mode 100644 index 0000000000..f01b55c6ce --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/PanelViewMapper.xml @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + 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, panel_id, chart_view_id, create_by, create_time, update_by, update_time + + + content + + + + + + delete from panel_view + where id = #{id,jdbcType=VARCHAR} + + + delete from panel_view + + + + + + insert into panel_view (id, panel_id, chart_view_id, + create_by, create_time, update_by, + update_time, content) + values (#{id,jdbcType=VARCHAR}, #{panelId,jdbcType=VARCHAR}, #{chartViewId,jdbcType=VARCHAR}, + #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateBy,jdbcType=VARCHAR}, + #{updateTime,jdbcType=BIGINT}, #{content,jdbcType=LONGVARBINARY}) + + + insert into panel_view + + + id, + + + panel_id, + + + chart_view_id, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + content, + + + + + #{id,jdbcType=VARCHAR}, + + + #{panelId,jdbcType=VARCHAR}, + + + #{chartViewId,jdbcType=VARCHAR}, + + + #{createBy,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=BIGINT}, + + + #{updateBy,jdbcType=VARCHAR}, + + + #{updateTime,jdbcType=BIGINT}, + + + #{content,jdbcType=LONGVARBINARY}, + + + + + + update panel_view + + + id = #{record.id,jdbcType=VARCHAR}, + + + panel_id = #{record.panelId,jdbcType=VARCHAR}, + + + chart_view_id = #{record.chartViewId,jdbcType=VARCHAR}, + + + create_by = #{record.createBy,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=BIGINT}, + + + update_by = #{record.updateBy,jdbcType=VARCHAR}, + + + update_time = #{record.updateTime,jdbcType=BIGINT}, + + + content = #{record.content,jdbcType=LONGVARBINARY}, + + + + + + + + update panel_view + set id = #{record.id,jdbcType=VARCHAR}, + panel_id = #{record.panelId,jdbcType=VARCHAR}, + chart_view_id = #{record.chartViewId,jdbcType=VARCHAR}, + create_by = #{record.createBy,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + update_by = #{record.updateBy,jdbcType=VARCHAR}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + content = #{record.content,jdbcType=LONGVARBINARY} + + + + + + update panel_view + set id = #{record.id,jdbcType=VARCHAR}, + panel_id = #{record.panelId,jdbcType=VARCHAR}, + chart_view_id = #{record.chartViewId,jdbcType=VARCHAR}, + create_by = #{record.createBy,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + update_by = #{record.updateBy,jdbcType=VARCHAR}, + update_time = #{record.updateTime,jdbcType=BIGINT} + + + + + + update panel_view + + + panel_id = #{panelId,jdbcType=VARCHAR}, + + + chart_view_id = #{chartViewId,jdbcType=VARCHAR}, + + + create_by = #{createBy,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=BIGINT}, + + + update_by = #{updateBy,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=BIGINT}, + + + content = #{content,jdbcType=LONGVARBINARY}, + + + where id = #{id,jdbcType=VARCHAR} + + + update panel_view + set panel_id = #{panelId,jdbcType=VARCHAR}, + chart_view_id = #{chartViewId,jdbcType=VARCHAR}, + create_by = #{createBy,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + update_by = #{updateBy,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=BIGINT}, + content = #{content,jdbcType=LONGVARBINARY} + where id = #{id,jdbcType=VARCHAR} + + + update panel_view + set panel_id = #{panelId,jdbcType=VARCHAR}, + chart_view_id = #{chartViewId,jdbcType=VARCHAR}, + create_by = #{createBy,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + update_by = #{updateBy,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=BIGINT} + where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java index 89ae4b74d8..fdbb430fbc 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java @@ -16,4 +16,6 @@ public interface ExtChartViewMapper { @Select("select id from chart_view where table_id = #{tableId}") List allViewIds(@Param("tableId") String tableId); + + String searchAdviceSceneId(@Param("userId") String userId,@Param("panelId") String panelId); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml index 042283e2f9..a7ccd9855c 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml @@ -52,7 +52,7 @@ `scene_id`, `table_id`, `type`, - `title`, + GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ), `x_axis`, `y_axis`, `custom_attr`, @@ -68,4 +68,19 @@ WHERE id = #{oldChartId} + + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.java index 5b942d801d..5261a66430 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.java @@ -7,4 +7,6 @@ import java.util.List; public interface ExtDataSetTableMapper { List search(DataSetTableRequest request); + + DataSetTableDTO searchOne(DataSetTableRequest request); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml index b0fdba70dc..77f6be94d5 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml @@ -7,6 +7,33 @@ + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java index 03f3aab385..12fa0e3264 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.java @@ -12,6 +12,8 @@ public interface ExtPanelShareMapper { int batchInsert(@Param("shares") List shares); + int batchDelete(@Param("shareIds") List shareIds); + List query(Map param); List queryWithResource(GridExample example); diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml index f288f31e74..c260a350ed 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelShareMapper.xml @@ -16,6 +16,14 @@ + + delete from panel_share + where share_id in + + #{shareId} + + + + + delete from panel_view where panel_id =#{panelId} + + + + INSERT INTO `panel_view` (id,chart_view_id, panel_id) VALUES + + (uuid(),#{panelView.chartViewId},#{panelView.panelId}) + + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.java deleted file mode 100644 index 7fd97b6165..0000000000 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.dataease.base.mapper.ext; - -import io.dataease.base.domain.SysAuthDetail; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -public interface ExtSysAuthDetailMapper { - List searchAuthTypeModel(@Param("authTypeModel") String authTypeModel); - - void copyAuthModel(@Param("authTypeModel") String authTypeModel,@Param("authId") String authId,@Param("createUser") String createUser); - - void authDetailsChange(@Param("privilegeValue")Integer privilegeValue,@Param("privilegeType")Integer privilegeType,@Param("authIds")List authIds); -} diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.xml deleted file mode 100644 index 1a44a60b04..0000000000 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthDetailMapper.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - INSERT INTO sys_auth_detail ( - id, - auth_id, - privilege_name, - privilege_type, - privilege_value, - privilege_extend, - remark, - create_user, - create_time - ) SELECT - uuid() AS id, - #{authId} AS auth_id, - sys_auth_detail.privilege_name, - sys_auth_detail.privilege_type, - sys_auth_detail.privilege_value, - sys_auth_detail.privilege_extend, - sys_auth_detail.remark, - #{createUser} AS create_user, - unix_timestamp(now())* 1000 AS create_time - FROM - sys_auth_detail where auth_id =#{authTypeModel} - - - - - UPDATE sys_auth_detail - SET privilege_value = #{privilegeValue} - - auth_id in - #{authId} - - and privilege_type <= #{privilegeType} - - - and privilege_type >= #{privilegeType} - - - - - diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java index 753985a3e3..d0018e5069 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.java @@ -1,20 +1,9 @@ package io.dataease.base.mapper.ext; -import io.dataease.controller.request.SysAuthRequest; -import io.dataease.dto.SysAuthDetailDTO; import org.apache.ibatis.annotations.Param; -import java.util.List; public interface ExtSysAuthMapper { - List searchAuth(SysAuthRequest request); - - Boolean authExist(@Param("authSource") String authSource, @Param("authTarget") String authTarget); - - String findAuthId(@Param("authSource") String authSource, - @Param("authSourceType") String authSourceType, - @Param("authTarget") String authTarget, - @Param("authTargetType") String authTargetType); Boolean checkTreeNoManageCount(@Param("userId") Long userId , @Param("modelType") String modelType, @Param("nodeId") String nodeId); diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml index 7ac4a5b7a6..7386356dfe 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysAuthMapper.xml @@ -10,66 +10,6 @@ - - - - - - - diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMsgMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMsgMapper.java new file mode 100644 index 0000000000..9d5c2ad132 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtSysMsgMapper.java @@ -0,0 +1,36 @@ +package io.dataease.base.mapper.ext; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +@Mapper +public interface ExtSysMsgMapper { + + + @Update({ + "" + }) + int batchStatus(@Param("msgIds") List msgIds); + + + @Delete({ + "" + }) + int batchDelete(@Param("msgIds") List msgIds); + + +} diff --git a/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java b/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java index 7d0260887e..abbb5c9bf7 100644 --- a/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java +++ b/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java @@ -60,4 +60,9 @@ public class ChartViewController { public String chartCopy(@PathVariable String id) { return chartViewService.chartCopy(id); } + + @GetMapping("searchAdviceSceneId/{panelId}") + public String searchAdviceSceneId(@PathVariable String panelId){ + return chartViewService.searchAdviceSceneId(panelId); + } } diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java index 3fe41d449a..0f51a4ccc3 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -54,6 +54,11 @@ public class DataSetTableController { return dataSetTableService.get(id); } + @PostMapping("getWithPermission/{id}") + public DataSetTableDTO getWithPermission(@PathVariable String id) { + return dataSetTableService.getWithPermission(id); + } + @PostMapping("getFields") public List getFields(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception { return dataSetTableService.getFields(dataSetTableRequest); diff --git a/backend/src/main/java/io/dataease/controller/message/MsgController.java b/backend/src/main/java/io/dataease/controller/message/MsgController.java index 49d6de81c7..a3125df1de 100644 --- a/backend/src/main/java/io/dataease/controller/message/MsgController.java +++ b/backend/src/main/java/io/dataease/controller/message/MsgController.java @@ -36,4 +36,15 @@ public class MsgController { public void setReaded(@PathVariable Long msgId) { sysMsgService.setReaded(msgId); } + + + @PostMapping("/batchRead") + public void batchRead(@RequestBody List msgIds) { + sysMsgService.setBatchReaded(msgIds); + } + + @PostMapping("/batchDelete") + public void batchDelete(@RequestBody List msgIds) { + sysMsgService.batchDelete(msgIds); + } } diff --git a/backend/src/main/java/io/dataease/controller/message/dto/MsgRequest.java b/backend/src/main/java/io/dataease/controller/message/dto/MsgRequest.java index c95b20d637..c081703309 100644 --- a/backend/src/main/java/io/dataease/controller/message/dto/MsgRequest.java +++ b/backend/src/main/java/io/dataease/controller/message/dto/MsgRequest.java @@ -3,11 +3,16 @@ package io.dataease.controller.message.dto; import lombok.Data; import java.io.Serializable; +import java.util.List; @Data public class MsgRequest implements Serializable { + private static final long serialVersionUID = 1920091635946508658L; + private Integer type; private Boolean status; + + private List orders; } diff --git a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java index 14cc345578..379c3174c4 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java @@ -1,6 +1,7 @@ package io.dataease.controller.panel.api; import io.dataease.base.domain.PanelShare; +import io.dataease.controller.request.panel.PanelShareFineDto; import io.dataease.controller.request.panel.PanelShareRequest; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.panel.PanelShareDto; @@ -31,5 +32,9 @@ public interface ShareApi { @PostMapping("/queryWithResourceId") List queryWithResourceId(BaseGridRequest request); + + @ApiOperation("优化创建分享") + @PostMapping("/fineSave") + void fineSave(PanelShareFineDto panelShareFineDto); } diff --git a/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java b/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java index 1e5004197e..af2bacbd2a 100644 --- a/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java +++ b/backend/src/main/java/io/dataease/controller/panel/server/ShareServer.java @@ -2,6 +2,7 @@ package io.dataease.controller.panel.server; import io.dataease.base.domain.PanelShare; import io.dataease.controller.panel.api.ShareApi; +import io.dataease.controller.request.panel.PanelShareFineDto; import io.dataease.controller.request.panel.PanelShareRequest; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.panel.PanelShareDto; @@ -32,4 +33,11 @@ public class ShareServer implements ShareApi { public List queryWithResourceId(@RequestBody BaseGridRequest request) { return shareService.queryWithResource(request); } + + @Override + public void fineSave(@RequestBody PanelShareFineDto panelShareFineDto) { + shareService.fineSave(panelShareFineDto); + } } + + diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelShareFineDto.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelShareFineDto.java new file mode 100644 index 0000000000..76f3d8cc74 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelShareFineDto.java @@ -0,0 +1,18 @@ +package io.dataease.controller.request.panel; + +import io.dataease.commons.model.AuthURD; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class PanelShareFineDto implements Serializable { + + + private static final long serialVersionUID = -792964171742204428L; + + private String resourceId; + + private AuthURD authURD; +} diff --git a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java b/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java deleted file mode 100644 index a6cdb78139..0000000000 --- a/backend/src/main/java/io/dataease/controller/sys/SysAuthController.java +++ /dev/null @@ -1,61 +0,0 @@ -package io.dataease.controller.sys; - -import io.dataease.base.domain.SysAuthDetail; -import io.dataease.controller.handler.annotation.I18n; -import io.dataease.controller.request.BaseTreeRequest; -import io.dataease.controller.request.SysAuthRequest; -import io.dataease.dto.SysAuthDetailDTO; -import io.dataease.dto.VAuthModelDTO; -import io.dataease.service.sys.SysAuthService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; -import java.util.Map; - -/** - * Author: wangjiahao - * Date: 2021-05-11 - * Description: - */ -@RestController -@RequiredArgsConstructor -@Api(tags = "系统:权限管理") -@RequestMapping("/api/sys_auth") -public class SysAuthController { - - @Resource - private SysAuthService sysAuthService; - - @ApiOperation("查询视图") - @PostMapping("/authModels") - @I18n - public List authModels(@RequestBody BaseTreeRequest request){ - return sysAuthService.searchAuthModelTree(request); - } - - - @ApiOperation("查询授权") - @PostMapping("/authDetails") - public Map> authDetails(@RequestBody SysAuthRequest request){ - return sysAuthService.searchAuthDetails(request); - } - - - @ApiOperation("查询授权模板") - @GetMapping("/authDetailsModel/{authType}") - @I18n - public ListauthDetailsModel(@PathVariable String authType){ - return sysAuthService.searchAuthDetailsModel(authType); - } - - - @ApiOperation("修改权限") - @PostMapping("/authChange") - public void authChange(@RequestBody SysAuthRequest request){ - sysAuthService.authChange(request); - } -} diff --git a/backend/src/main/java/io/dataease/dto/panel/po/PanelViewInsertDTO.java b/backend/src/main/java/io/dataease/dto/panel/po/PanelViewInsertDTO.java new file mode 100644 index 0000000000..1bdd000bda --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/po/PanelViewInsertDTO.java @@ -0,0 +1,21 @@ +package io.dataease.dto.panel.po; + +import io.dataease.base.domain.PanelView; + +/** + * Author: wangjiahao + * Date: 2021-07-06 + * Description: + */ +public class PanelViewInsertDTO extends PanelView { + + public PanelViewInsertDTO() { + } + + public PanelViewInsertDTO(String chartViewId,String panelGroupId) { + super(); + super.setChartViewId(chartViewId); + super.setPanelId(panelGroupId); + } + +} diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index ee6b7a02a4..93e1f35fa6 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -193,11 +193,14 @@ public class DorisQueryProvider extends QueryProvider { filter.append(" AND ").append(x.getDataeaseName()); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND ").append(x.getDataeaseName()).append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -229,11 +232,16 @@ public class DorisQueryProvider extends QueryProvider { filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName()); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null)"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { +// filter.append(" AND _") +// .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName()) +// .append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -310,11 +318,16 @@ public class DorisQueryProvider extends QueryProvider { filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName()); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null)"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { +// filter.append(" AND _") +// .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName()) +// .append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -349,7 +362,7 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String createRawQuerySQL(String table, List fields){ + public String createRawQuerySQL(String table, List fields) { String[] array = fields.stream().map(f -> { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); @@ -393,7 +406,7 @@ public class DorisQueryProvider extends QueryProvider { case "not like": return " NOT LIKE "; case "null": - return " IS NULL "; + return " IN "; case "not_null": return " IS NOT NULL "; case "between": @@ -424,7 +437,10 @@ public class DorisQueryProvider extends QueryProvider { filter.append(" ") .append(transMysqlFilterTerm(request.getTerm())) .append(" "); - if (StringUtils.containsIgnoreCase(request.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(request.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(request.getTerm(), "not_null")) { + filter.append(" AND ").append(field.getDataeaseName()).append(" <> ''"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index e2cbb61fd7..ac7dd0406b 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -198,11 +198,14 @@ public class MysqlQueryProvider extends QueryProvider { filter.append(" AND `").append(x.getOriginName()).append("`"); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `").append(x.getOriginName()).append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -235,11 +238,16 @@ public class MysqlQueryProvider extends QueryProvider { filter.append(" AND `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + .append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -316,11 +324,16 @@ public class MysqlQueryProvider extends QueryProvider { filter.append(" AND `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + .append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -355,7 +368,7 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String createRawQuerySQL(String table, List fields){ + public String createRawQuerySQL(String table, List fields) { String[] array = fields.stream().map(f -> { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); @@ -392,7 +405,7 @@ public class MysqlQueryProvider extends QueryProvider { case "not like": return " NOT LIKE "; case "null": - return " IS NULL "; + return " IN "; case "not_null": return " IS NOT NULL "; case "between": @@ -423,7 +436,10 @@ public class MysqlQueryProvider extends QueryProvider { filter.append(" ") .append(transMysqlFilterTerm(request.getTerm())) .append(" "); - if (StringUtils.containsIgnoreCase(request.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(request.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(request.getTerm(), "not_null")) { + filter.append(" AND `").append(field.getOriginName()).append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { diff --git a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java index 6cc986cb0c..6bb4c06bac 100644 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java @@ -1,12 +1,10 @@ package io.dataease.provider.oracle; -import com.google.gson.Gson; import io.dataease.base.domain.DatasetTableField; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.provider.QueryProvider; -import io.swagger.models.auth.In; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -93,9 +91,9 @@ public class OracleQueryProvider extends QueryProvider { // 如果原始类型为时间 if (f.getDeExtractType() == TIME) { if (f.getDeType() == INT || f.getDeType() == FLOAT) { //日期转数值 - if(f.getType().equalsIgnoreCase("DATE")){ + if (f.getType().equalsIgnoreCase("DATE")) { stringBuilder.append("TO_NUMBER( ").append(f.getOriginName()).append(" - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ").append(f.getDataeaseName()); - }else { + } else { stringBuilder.append("TO_NUMBER(to_date(to_char( ").append(f.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ").append(f.getDataeaseName()); } } else { @@ -123,9 +121,9 @@ public class OracleQueryProvider extends QueryProvider { return MessageFormat.format("SELECT {0} FROM {1} ", StringUtils.join(array, ","), table); } - private String sqlColumn(List fields){ + private String sqlColumn(List fields) { String[] array = fields.stream().map(f -> { - return f.getDataeaseName(); + return f.getDataeaseName(); }).toArray(String[]::new); return StringUtils.join(array, ","); } @@ -184,17 +182,17 @@ public class OracleQueryProvider extends QueryProvider { // 如果原始类型为时间 if (x.getDeExtractType() == TIME) { if (x.getDeType() == INT || x.getDeType() == FLOAT) { //时间转数值 - if(x.getType().equalsIgnoreCase("DATE")){ + if (x.getType().equalsIgnoreCase("DATE")) { stringBuilder.append("TO_NUMBER( ").append(x.getOriginName()).append(" - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS \"_").append(x.getDataeaseName()).append("\" "); - }else { + } else { stringBuilder.append("TO_NUMBER(to_date(to_char( ").append(x.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ") .append(x.getDataeaseName()).append("\" "); } } else if (x.getDeType() == TIME) { //格式化显示时间 String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); - if(x.getType().equalsIgnoreCase("DATE")){ + if (x.getType().equalsIgnoreCase("DATE")) { stringBuilder.append("to_char( ").append(x.getOriginName()).append(" ,'").append(format).append("') AS \"_").append(x.getOriginName()).append("\" "); - }else { + } else { stringBuilder.append("to_char(to_date(to_char( ").append(x.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" "); } } else { @@ -206,7 +204,7 @@ public class OracleQueryProvider extends QueryProvider { if (x.getDeExtractType() == STRING) { //字符串转时间 stringBuilder.append("to_char(to_date(").append(x.getOriginName()).append(" , 'yyyy-MM-dd hh24:mi:ss'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" "); } else { //数值转时间 - stringBuilder.append("to_char(").append(x.getOriginName()) .append("/ (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" "); + stringBuilder.append("to_char(").append(x.getOriginName()).append("/ (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" "); } } else { stringBuilder.append(" ").append(x.getOriginName()).append(" AS \"_").append(x.getOriginName()).append("\" "); @@ -234,11 +232,14 @@ public class OracleQueryProvider extends QueryProvider { filter.append(" AND ").append(x.getOriginName()).append(" "); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND ").append(x.getOriginName()).append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -271,11 +272,16 @@ public class OracleQueryProvider extends QueryProvider { filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(" "); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND _") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + .append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -352,11 +358,16 @@ public class OracleQueryProvider extends QueryProvider { filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(" "); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND _") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(" ") + .append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { - filter.append("%").append(f.getValue()).append("%"); + filter.append("'%").append(f.getValue()).append("%'"); } else { filter.append("'").append(f.getValue()).append("'"); } @@ -391,7 +402,7 @@ public class OracleQueryProvider extends QueryProvider { } @Override - public String createRawQuerySQL(String table, List fields){ + public String createRawQuerySQL(String table, List fields) { String[] array = fields.stream().map(f -> { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName()); @@ -428,7 +439,7 @@ public class OracleQueryProvider extends QueryProvider { case "not like": return " NOT LIKE "; case "null": - return " IS NULL "; + return " IN "; case "not_null": return " IS NOT NULL "; case "between": @@ -459,7 +470,10 @@ public class OracleQueryProvider extends QueryProvider { filter.append(" ") .append(transMysqlFilterTerm(request.getTerm())) .append(" "); - if (StringUtils.containsIgnoreCase(request.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(request.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(request.getTerm(), "not_null")) { + filter.append(" AND `").append(field.getOriginName()).append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java index a0005fefc5..9151ad4649 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -6,31 +6,31 @@ import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; /** * @Author gin * @Date 2021/5/17 2:43 下午 */ -@Service("sqlserverQuery") +@Service("sqlServerQuery") public class SqlserverQueryProvider extends QueryProvider { @Override public Integer transFieldType(String field) { - switch (field.toUpperCase()) { + switch (field) { case "CHAR": case "VARCHAR": case "TEXT": case "TINYTEXT": case "MEDIUMTEXT": case "LONGTEXT": - case "NCHAR": - case "NVARCHAR": - case "NTEXT": case "ENUM": return 0;// 文本 case "DATE": @@ -59,7 +59,7 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createQueryCountSQL(String table) { - return MessageFormat.format("SELECT count(*) FROM {0}", table); + return MessageFormat.format("SELECT COUNT(*) FROM {0}", table); } @Override @@ -69,7 +69,7 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createSQLPreview(String sql, String orderBy) { - return "SELECT * FROM (" + sqlFix(sql) + ") AS tmp ORDER BY " + orderBy + " LIMIT 0,1000"; + return "SELECT * FROM (" + sqlFix(sql) + ") AS tmp ORDER BY null " + " LIMIT 0,1000"; } @Override @@ -79,21 +79,30 @@ public class SqlserverQueryProvider extends QueryProvider { // 如果原始类型为时间 if (f.getDeExtractType() == 1) { if (f.getDeType() == 2 || f.getDeType() == 3) { - stringBuilder.append("unix_timestamp(").append(f.getOriginName()).append(")*1000 as ").append(f.getOriginName()); + stringBuilder.append("UNIX_TIMESTAMP(`").append(f.getOriginName()).append("`)*1000 AS ").append(f.getDataeaseName()); } else { - stringBuilder.append(f.getOriginName()); + stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); + } + } else if (f.getDeExtractType() == 0) { + if (f.getDeType() == 2) { + stringBuilder.append("CAST(`").append(f.getOriginName()).append("` AS DECIMAL(20,0)) AS ").append(f.getDataeaseName()); + } else if (f.getDeType() == 3) { + stringBuilder.append("CAST(`").append(f.getOriginName()).append("` AS DECIMAL(20,2)) AS ").append(f.getDataeaseName()); + } else if (f.getDeType() == 1) { + stringBuilder.append("DATE_FORMAT(`").append(f.getOriginName()).append("`,'%Y-%m-%d %H:%i:%S') AS _").append(f.getDataeaseName()); + } else { + stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); } } else { if (f.getDeType() == 1) { - stringBuilder.append("FROM_UNIXTIME(cast(").append(f.getOriginName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') as ").append(f.getOriginName()); + stringBuilder.append("FROM_UNIXTIME(CAST(`").append(f.getOriginName()).append("` AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') AS ").append(f.getDataeaseName()); } else { - stringBuilder.append(f.getOriginName()); + stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); } } return stringBuilder.toString(); }).toArray(String[]::new); - - return MessageFormat.format("SELECT {0} FROM {1} ORDER BY " + (fields.size() > 0 ? fields.get(0).getOriginName() : "null"), StringUtils.join(array, ","), table); + return MessageFormat.format("SELECT {0} FROM {1} ORDER BY null", StringUtils.join(array, ","), table); } @Override @@ -103,7 +112,7 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize) { - return createQuerySQL(table, fields) + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; + return createQuerySQL(table, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; } @Override @@ -132,15 +141,15 @@ public class SqlserverQueryProvider extends QueryProvider { if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) { f.append("CAST(") .append(y.getSummary()).append("(") - .append("CAST(").append(y.getOriginName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") + .append("CAST(`").append(y.getOriginName()).append("` AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") .append(") AS DECIMAL(20,2)").append(")"); } else { f.append(y.getSummary()).append("(") - .append("CAST(").append(y.getOriginName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") + .append("CAST(`").append(y.getOriginName()).append("` AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") .append(")"); } } - f.append(" AS _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()); + f.append(" AS `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); return f.toString(); }).toArray(String[]::new); String[] groupField = xAxis.stream().map(x -> { @@ -148,24 +157,32 @@ public class SqlserverQueryProvider extends QueryProvider { // 如果原始类型为时间 if (x.getDeExtractType() == 1) { if (x.getDeType() == 2 || x.getDeType() == 3) { - stringBuilder.append("unix_timestamp(").append(x.getOriginName()).append(")*1000 as ").append(x.getOriginName()); + stringBuilder.append("UNIX_TIMESTAMP(`").append(x.getOriginName()).append("`)*1000 AS `_").append(x.getOriginName()).append("`"); + } else if (x.getDeType() == 1) { + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + stringBuilder.append("DATE_FORMAT(`").append(x.getOriginName()).append("`,'").append(format).append("') AS `_").append(x.getOriginName()).append("`"); } else { - stringBuilder.append(x.getOriginName()); + stringBuilder.append("`").append(x.getOriginName()).append("` AS `_").append(x.getOriginName()).append("`"); } } else { if (x.getDeType() == 1) { - stringBuilder.append("FROM_UNIXTIME(cast(").append(x.getOriginName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') as ").append(x.getOriginName()); + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + if (x.getDeExtractType() == 0) { + stringBuilder.append("DATE_FORMAT(`").append(x.getOriginName()).append("`,'").append(format).append("') AS `_").append(x.getOriginName()).append("`"); + } else { + stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(CAST(`").append(x.getOriginName()).append("` AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') AS `_").append(x.getOriginName()).append("`"); + } } else { - stringBuilder.append(x.getOriginName()); + stringBuilder.append("`").append(x.getOriginName()).append("` AS `_").append(x.getOriginName()).append("`"); } } return stringBuilder.toString(); }).toArray(String[]::new); - String[] group = xAxis.stream().map(ChartViewFieldDTO::getOriginName).toArray(String[]::new); + String[] group = xAxis.stream().map(x -> "`_" + x.getOriginName() + "`").toArray(String[]::new); String[] xOrder = xAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none")) - .map(f -> f.getOriginName() + " " + f.getSort()).toArray(String[]::new); + .map(f -> "`_" + f.getOriginName() + "` " + f.getSort()).toArray(String[]::new); String[] yOrder = yAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none")) - .map(f -> "_" + f.getSummary() + "_" + (StringUtils.equalsIgnoreCase(f.getOriginName(), "*") ? "" : f.getOriginName()) + " " + f.getSort()).toArray(String[]::new); + .map(f -> "`_" + f.getSummary() + "_" + (StringUtils.equalsIgnoreCase(f.getOriginName(), "*") ? "" : f.getOriginName()) + "` " + f.getSort()).toArray(String[]::new); String[] order = Arrays.copyOf(xOrder, xOrder.length + yOrder.length); System.arraycopy(yOrder, 0, order, xOrder.length, yOrder.length); @@ -174,14 +191,17 @@ public class SqlserverQueryProvider extends QueryProvider { String[] s = x.getFilter().stream().map(f -> { StringBuilder filter = new StringBuilder(); if (x.getDeType() == 1 && x.getDeExtractType() != 1) { - filter.append(" AND FROM_UNIXTIME(cast(") + filter.append(" AND FROM_UNIXTIME(cast(`") .append(x.getOriginName()) - .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + .append("` AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); } else { - filter.append(" AND ").append(x.getOriginName()); + filter.append(" AND `").append(x.getOriginName()).append("`"); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `").append(x.getOriginName()).append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { @@ -211,14 +231,19 @@ public class SqlserverQueryProvider extends QueryProvider { StringBuilder filter = new StringBuilder(); // 原始类型不是时间,在de中被转成时间的字段做处理 if (y.getDeType() == 1 && y.getDeExtractType() != 1) { - filter.append(" AND FROM_UNIXTIME(cast(_") - .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) - .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + filter.append(" AND FROM_UNIXTIME(CAST(`_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`") + .append(" AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); } else { - filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()); + filter.append(" AND `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); } filter.append(transMysqlFilterTerm(f.getTerm())); - if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) { + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + .append("`").append(" <> ''"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { @@ -233,9 +258,10 @@ public class SqlserverQueryProvider extends QueryProvider { if (resultFilter.length == 0) { return sql; } else { - String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1}", + String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1} ORDER BY {2}", "(" + sql + ") AS tmp", - StringUtils.join(resultFilter, " ")); + StringUtils.join(resultFilter, " "), + ObjectUtils.isNotEmpty(yOrder) ? StringUtils.join(yOrder, ",") : "null"); return filterSql; } } @@ -252,12 +278,83 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String getSQLSummary(String table, List yAxis, List customFilter, List extFilterRequestList) { - return null; + // 字段汇总 排序等 + String[] field = yAxis.stream().map(y -> { + StringBuilder f = new StringBuilder(); + if (StringUtils.equalsIgnoreCase(y.getOriginName(), "*")) { + f.append(y.getSummary()).append("(").append(y.getOriginName()).append(")"); + } else { + if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) { + f.append("CAST(") + .append(y.getSummary()).append("(") + .append("CAST(`").append(y.getOriginName()).append("` AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") + .append(") AS DECIMAL(20,2)").append(")"); + } else { + f.append(y.getSummary()).append("(") + .append("CAST(`").append(y.getOriginName()).append("` AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")") + .append(")"); + } + } + f.append(" AS `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); + return f.toString(); + }).toArray(String[]::new); + + String[] order = yAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none")) + .map(f -> "`_" + f.getSummary() + "_" + (StringUtils.equalsIgnoreCase(f.getOriginName(), "*") ? "" : f.getOriginName()) + "` " + f.getSort()).toArray(String[]::new); + + String sql = MessageFormat.format("SELECT {0} FROM {1} WHERE 1=1 {2} ORDER BY null,{3}", + StringUtils.join(field, ","), + table, + transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter + StringUtils.join(order, ",")); + if (sql.endsWith(",")) { + sql = sql.substring(0, sql.length() - 1); + } + // 如果是对结果字段过滤,则再包裹一层sql + String[] resultFilter = yAxis.stream().filter(y -> CollectionUtils.isNotEmpty(y.getFilter()) && y.getFilter().size() > 0) + .map(y -> { + String[] s = y.getFilter().stream().map(f -> { + StringBuilder filter = new StringBuilder(); + // 原始类型不是时间,在de中被转成时间的字段做处理 + if (y.getDeType() == 1 && y.getDeExtractType() != 1) { + filter.append(" AND FROM_UNIXTIME(CAST(`_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`") + .append(" AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + } else { + filter.append(" AND `_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("`"); + } + filter.append(transMysqlFilterTerm(f.getTerm())); + if (StringUtils.equalsIgnoreCase(f.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_null")) { + filter.append(" AND `_") + .append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + .append("`").append(" <> ''"); + } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { + filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')"); + } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { + filter.append("%").append(f.getValue()).append("%"); + } else { + filter.append("'").append(f.getValue()).append("'"); + } + return filter.toString(); + }).toArray(String[]::new); + return StringUtils.join(s, " "); + }).toArray(String[]::new); + if (resultFilter.length == 0) { + return sql; + } else { + String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1} ORDER BY {2}", + "(" + sql + ") AS tmp", + StringUtils.join(resultFilter, " "), + ObjectUtils.isNotEmpty(order) ? StringUtils.join(order, ",") : "null"); + return filterSql; + } } @Override - public String getSQLSummaryAsTmp(String table, List yAxis, List customFilter, List extFilterRequestList) { - return null; + public String getSQLSummaryAsTmp(String sql, List yAxis, List customFilter, List extFilterRequestList) { + return getSQLSummary(" (" + sqlFix(sql) + ") AS tmp ", yAxis, customFilter, extFilterRequestList); } @Override @@ -271,7 +368,7 @@ public class SqlserverQueryProvider extends QueryProvider { } @Override - public String createRawQuerySQL(String table, List fields){ + public String createRawQuerySQL(String table, List fields) { String[] array = fields.stream().map(f -> { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); @@ -308,9 +405,11 @@ public class SqlserverQueryProvider extends QueryProvider { case "not like": return " NOT LIKE "; case "null": - return " IS NULL "; + return " IN "; case "not_null": return " IS NOT NULL "; + case "between": + return " BETWEEN "; default: return ""; } @@ -324,17 +423,24 @@ public class SqlserverQueryProvider extends QueryProvider { for (ChartCustomFilterDTO request : requestList) { String value = request.getValue(); DatasetTableField field = request.getField(); + if (ObjectUtils.isEmpty(field)) { + continue; + } if (field.getDeType() == 1 && field.getDeExtractType() != 1) { - filter.append(" AND FROM_UNIXTIME(cast(") + filter.append(" AND FROM_UNIXTIME(CAST(`") .append(field.getOriginName()) - .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + .append("` AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); } else { - filter.append(" AND ").append(field.getOriginName()); + filter.append(" AND `").append(field.getOriginName()).append("`"); } filter.append(" ") .append(transMysqlFilterTerm(request.getTerm())) .append(" "); - if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { + if (StringUtils.equalsIgnoreCase(request.getTerm(), "null")) { + filter.append("(null,'')"); + } else if (StringUtils.equalsIgnoreCase(request.getTerm(), "not_null")) { + filter.append(" AND `").append(field.getOriginName()).append("`").append(" <> ''"); + } else if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { filter.append("'%").append(value).append("%'"); @@ -357,11 +463,11 @@ public class SqlserverQueryProvider extends QueryProvider { } DatasetTableField field = request.getDatasetTableField(); if (field.getDeType() == 1 && field.getDeExtractType() != 1) { - filter.append(" AND FROM_UNIXTIME(cast(") + filter.append(" AND FROM_UNIXTIME(CAST(`") .append(field.getOriginName()) - .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + .append("` AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); } else { - filter.append(" AND ").append(field.getOriginName()); + filter.append(" AND `").append(field.getOriginName()).append("`"); } filter.append(" ") .append(transMysqlFilterTerm(request.getOperator())) @@ -370,6 +476,11 @@ public class SqlserverQueryProvider extends QueryProvider { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { filter.append("'%").append(value.get(0)).append("%'"); + } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); + String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); + filter.append("'").append(startTime).append("' AND '").append(endTime).append("'"); } else { filter.append("'").append(value.get(0)).append("'"); } @@ -383,4 +494,30 @@ public class SqlserverQueryProvider extends QueryProvider { } return sql; } + + private String transDateFormat(String dateStyle, String datePattern) { + String split = "-"; + if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) { + split = "-"; + } else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) { + split = "/"; + } + + switch (dateStyle) { + case "y": + return "%Y"; + case "y_M": + return "%Y" + split + "%m"; + case "y_M_d": + return "%Y" + split + "%m" + split + "%d"; + case "H_m_s": + return "%H:%i:%S"; + case "y_M_d_H_m": + return "%Y" + split + "%m" + split + "%d" + " %H:%i"; + case "y_M_d_H_m_s": + return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S"; + default: + return "%Y-%m-%d %H:%i:%S"; + } + } } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 7f233d6fa5..2d5d9cc40f 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -10,6 +10,7 @@ import io.dataease.commons.constants.JdbcConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.CommonBeanFactory; +import io.dataease.commons.utils.LogUtil; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.chart.ChartGroupRequest; @@ -239,7 +240,23 @@ public class ChartViewService { else { data = (List) cache; }*/ - data = cacheViewData(datasourceProvider, datasourceRequest, id); + // 仪表板有参数不实用缓存 + if (CollectionUtils.isNotEmpty(requestList.getFilter())) { + data = datasourceProvider.getData(datasourceRequest); + }else { + try{ + data = cacheViewData(datasourceProvider, datasourceRequest, id); + }catch (Exception e) { + LogUtil.error(e); + }finally { + // 如果当前对象被锁 且 当前线程冲入次数 > 0 则释放锁 + if (lock.isLocked() && lock.getHoldCount() > 0) { + lock.unlock(); + } + } + } + + } if (StringUtils.containsIgnoreCase(view.getType(), "pie") && data.size() > 1000) { data = data.subList(0, 1000); @@ -320,11 +337,17 @@ public class ChartViewService { Object cache = CacheUtils.get(JdbcConstants.VIEW_CACHE_KEY, viewId); if (cache == null) { if (lock.tryLock()) {// 获取锁成功 - result = datasourceProvider.getData(datasourceRequest); - if (result != null) { - CacheUtils.put(JdbcConstants.VIEW_CACHE_KEY, viewId, result, null, null); + try{ + result = datasourceProvider.getData(datasourceRequest); + if (result != null) { + CacheUtils.put(JdbcConstants.VIEW_CACHE_KEY, viewId, result, null, null); + } + }catch (Exception e) { + LogUtil.error(e); + throw e; + }finally { + lock.unlock(); } - lock.unlock(); }else {//获取锁失败 Thread.sleep(100);//避免CAS自旋频率过大 占用cpu资源过高 result = cacheViewData(datasourceProvider, datasourceRequest, viewId); @@ -382,4 +405,8 @@ public class ChartViewService { extChartViewMapper.chartCopy(newChartId,id); return newChartId; } + + public String searchAdviceSceneId(String panelId){ + return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(),panelId); + } } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index e42cde922d..51868fd5bb 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -215,6 +215,14 @@ public class DataSetTableService { return datasetTableMapper.selectByPrimaryKey(id); } + public DataSetTableDTO getWithPermission(String id) { + DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); + dataSetTableRequest.setId(id); + dataSetTableRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); + dataSetTableRequest.setTypeFilter(dataSetTableRequest.getTypeFilter()); + return extDataSetTableMapper.searchOne(dataSetTableRequest); + } + public List getFields(DataSetTableRequest dataSetTableRequest) throws Exception { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); @@ -282,52 +290,101 @@ public class DataSetTableService { realSize = Integer.parseInt(dataSetTableRequest.getRow()) % pageSize; } if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) { - Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); - if (ObjectUtils.isEmpty(ds)) { - throw new RuntimeException(Translator.get("i18n_datasource_delete")); + if (datasetTable.getMode() == 0) { + Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); + if (ObjectUtils.isEmpty(ds)) { + throw new RuntimeException(Translator.get("i18n_datasource_delete")); + } + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + String table = dataTableInfoDTO.getTable(); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize)); + try { + data.addAll(datasourceProvider.getData(datasourceRequest)); + } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); + dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + // check doris table + if (!checkDorisTableIsExists(dataSetTableRequest.getId())) { + throw new RuntimeException(Translator.get("i18n_data_not_sync")); + } + Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); + JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize)); + try { + data.addAll(jdbcProvider.getData(datasourceRequest)); + } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); + dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); + } catch (Exception e) { + e.printStackTrace(); + } } - DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); - DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(ds); - String table = dataTableInfoDTO.getTable(); - QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize)); - try { - data.addAll(datasourceProvider.getData(datasourceRequest)); - } catch (Exception e) { - e.printStackTrace(); - } - try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); - dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); - } catch (Exception e) { - e.printStackTrace(); - } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { - Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); - if (ObjectUtils.isEmpty(ds)) { - throw new RuntimeException(Translator.get("i18n_datasource_delete")); - } - DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); - DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(ds); + if (datasetTable.getMode() == 0) { + Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); + if (ObjectUtils.isEmpty(ds)) { + throw new RuntimeException(Translator.get("i18n_datasource_delete")); + } + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); - String sql = dataTableInfoDTO.getSql(); - QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize)); - System.out.println(datasourceRequest.getQuery()); - try { - data.addAll(datasourceProvider.getData(datasourceRequest)); - } catch (Exception e) { - e.printStackTrace(); - } - try { - datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()))); + String sql = dataTableInfoDTO.getSql(); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize)); System.out.println(datasourceRequest.getQuery()); - dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); - } catch (Exception e) { - e.printStackTrace(); + try { + data.addAll(datasourceProvider.getData(datasourceRequest)); + } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()))); + dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + // check doris table + if (!checkDorisTableIsExists(dataSetTableRequest.getId())) { + throw new RuntimeException(Translator.get("i18n_data_not_sync")); + } + Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); + JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize)); + try { + data.addAll(jdbcProvider.getData(datasourceRequest)); + } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); + dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); + } catch (Exception e) { + e.printStackTrace(); + } } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) { if (StringUtils.isEmpty(datasetTable.getSyncStatus()) || datasetTable.getSyncStatus().equalsIgnoreCase(JobStatus.Underway.name())) { @@ -357,13 +414,12 @@ public class DataSetTableService { e.printStackTrace(); } try { - datasourceRequest.setQuery(qp.createQueryCountSQL(table)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); dataSetPreviewPage.setTotal(Integer.valueOf(jdbcProvider.getData(datasourceRequest).get(0)[0])); } catch (Exception e) { e.printStackTrace(); } } - } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) { Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); @@ -379,7 +435,7 @@ public class DataSetTableService { } try { - datasourceRequest.setQuery(qp.createQueryCountSQL(table)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()))); dataSetPreviewPage.setTotal(Integer.valueOf(jdbcProvider.getData(datasourceRequest).get(0)[0])); } catch (Exception e) { e.printStackTrace(); diff --git a/backend/src/main/java/io/dataease/service/message/SysMsgService.java b/backend/src/main/java/io/dataease/service/message/SysMsgService.java index 754dc6d6ab..6c9a4273c0 100644 --- a/backend/src/main/java/io/dataease/service/message/SysMsgService.java +++ b/backend/src/main/java/io/dataease/service/message/SysMsgService.java @@ -4,7 +4,9 @@ package io.dataease.service.message; import io.dataease.base.domain.SysMsg; import io.dataease.base.domain.SysMsgExample; import io.dataease.base.mapper.SysMsgMapper; +import io.dataease.base.mapper.ext.ExtSysMsgMapper; import io.dataease.controller.message.dto.MsgRequest; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -16,12 +18,20 @@ public class SysMsgService { @Resource private SysMsgMapper sysMsgMapper; + @Resource + private ExtSysMsgMapper extSysMsgMapper; + public List query(Long userId, MsgRequest msgRequest) { - String orderClause = ""; + String orderClause = " create_time desc"; SysMsgExample example = new SysMsgExample(); SysMsgExample.Criteria criteria = example.createCriteria(); criteria.andUserIdEqualTo(userId); + List orders = msgRequest.getOrders(); + + if (CollectionUtils.isNotEmpty(orders)) { + orderClause = String.join(", ", orders); + } if (ObjectUtils.isNotEmpty(msgRequest.getType())) { criteria.andTypeEqualTo(msgRequest.getType()); @@ -29,11 +39,8 @@ public class SysMsgService { if (ObjectUtils.isNotEmpty(msgRequest.getStatus())) { criteria.andStatusEqualTo(msgRequest.getStatus()); - }else { - orderClause += " status asc ,"; } - orderClause += " create_time desc"; example.setOrderByClause(orderClause); List sysMsgs = sysMsgMapper.selectByExample(example); return sysMsgs; @@ -43,18 +50,20 @@ public class SysMsgService { SysMsg sysMsg = new SysMsg(); sysMsg.setMsgId(msgId); sysMsg.setStatus(true); + sysMsg.setReadTime(System.currentTimeMillis()); sysMsgMapper.updateByPrimaryKeySelective(sysMsg); } - public void save(SysMsg sysMsg) { -// sysMsg.setStatus(false); -// sysMsg.setCreateTime(System.currentTimeMillis()); - sysMsgMapper.insert(sysMsg); + public void setBatchReaded(List msgIds) { + extSysMsgMapper.batchStatus(msgIds); } - public void update(SysMsg sysMsg) { + public void batchDelete(List msgIds) { + extSysMsgMapper.batchDelete(msgIds); + } - sysMsgMapper.updateByPrimaryKey(sysMsg); + public void save(SysMsg sysMsg) { + sysMsgMapper.insert(sysMsg); } 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 17852ad456..00ed8e5e45 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -53,6 +53,8 @@ public class PanelGroupService { private PanelLinkService panelLinkService; @Resource private SysAuthService sysAuthService; + @Resource + private PanelViewService panelViewService; public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); @@ -72,6 +74,12 @@ public class PanelGroupService { @Transactional public PanelGroup saveOrUpdate(PanelGroupRequest request) { + try{ + panelViewService.syncPanelViews(request); + }catch (Exception e){ + e.printStackTrace(); + LOGGER.error("更新panelView出错panelId:{}" ,request.getId()); + } String panelId = request.getId(); if (StringUtils.isEmpty(panelId)) { // 新建 @@ -163,4 +171,5 @@ public class PanelGroupService { }); return chartViewDTOList; } + } 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 5ffe8fc8d0..aa1f50c544 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java @@ -1,15 +1,27 @@ package io.dataease.service.panel; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.dataease.base.domain.PanelGroup; +import io.dataease.base.domain.PanelGroupWithBLOBs; +import io.dataease.base.mapper.PanelViewMapper; import io.dataease.base.mapper.ext.ExtPanelViewMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.dto.panel.PanelViewDto; +import io.dataease.dto.panel.po.PanelViewInsertDTO; import io.dataease.dto.panel.po.PanelViewPo; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; + +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -22,6 +34,7 @@ public class PanelViewService { @Autowired(required = false) private ExtPanelViewMapper extPanelViewMapper; + private final static String SCENE_TYPE = "scene"; public List groups(){ @@ -63,4 +76,25 @@ public class PanelViewService { // 最后 没有孩子的老东西淘汰 return roots.stream().filter(item -> CollectionUtils.isNotEmpty(item.getChildren())).collect(Collectors.toList()); } + + @Transactional(propagation=Propagation.REQUIRES_NEW) + public void syncPanelViews(PanelGroupWithBLOBs panelGroup){ + String panelId = panelGroup.getId(); + Assert.notNull(panelId, "panelId cannot be null"); + String panelData = panelGroup.getPanelData(); + if(StringUtils.isNotEmpty(panelData)){ + JSONArray dataArray = JSON.parseArray(panelData); + List panelViewInsertDTOList = new ArrayList<>(); + for(int i=0;i addShares = new ArrayList<>();//新增的分享 + List redShareIdLists = new ArrayList<>();//取消的分享 + + String panelGroupId = panelShareFineDto.getResourceId(); + AuthURD authURD = panelShareFineDto.getAuthURD(); + AuthURD sharedAuthURD = new AuthURD(); + AuthURD addAuthURD = new AuthURD(); + + + + Map> authURDMap = new HashMap<>(); + authURDMap.put(0, authURD.getUserIds()); + authURDMap.put(1, authURD.getRoleIds()); + authURDMap.put(2, authURD.getDeptIds()); + + PanelShareExample example = new PanelShareExample(); + example.createCriteria().andPanelGroupIdEqualTo(panelGroupId); + List panelShares = mapper.selectByExample(example); + /*if (CollectionUtils.isEmpty(panelShares)) { + return; + }*/ + Map> typeSharedMap = panelShares.stream().map(this::convertNode).collect(Collectors.groupingBy(TempShareNode::getType)); + + for (Map.Entry> entry : authURDMap.entrySet()) { + Integer key = entry.getKey(); + List shareNodes = null; + if (null == typeSharedMap || null == typeSharedMap.get(key)) { + shareNodes = new ArrayList<>(); + }else{ + shareNodes = typeSharedMap.get(key); + } + + if (null != authURDMap.get(key)) { + Map dataMap = filterData(authURDMap.get(key), shareNodes); + List newIds = (List)dataMap.get("add"); + for (int i = 0; i < newIds.size(); i++) { + Long id = newIds.get(i); + PanelShare share = new PanelShare(); + share.setCreateTime(System.currentTimeMillis()); + share.setPanelGroupId(panelGroupId); + share.setTargetId(id); + share.setType(key); + addShares.add(share); + } + List redNodes = (List)dataMap.get("red"); + List redIds = redNodes.stream().map(TempShareNode::getShareId).distinct().collect(Collectors.toList()); + + redShareIdLists.addAll(redIds); + buildRedAuthURD(key, redNodes.stream().map(TempShareNode::getTargetId).distinct().collect(Collectors.toList()) , sharedAuthURD); + buildRedAuthURD(key, newIds, addAuthURD); + } + + } + + if (CollectionUtils.isNotEmpty(redShareIdLists)){ + extPanelShareMapper.batchDelete(redShareIdLists); + } + + if (CollectionUtils.isNotEmpty(addShares)){ + extPanelShareMapper.batchInsert(addShares); + } + + // 以上是业务代码 + // 下面是消息发送 + Set addUserIdSet = AuthUtils.userIdsByURD(addAuthURD); + Set redUserIdSet = AuthUtils.userIdsByURD(sharedAuthURD); + + + PanelGroup panelGroup = panelGroupMapper.selectByPrimaryKey(panelGroupId);; + CurrentUserDto user = AuthUtils.getUser(); + Gson gson = new Gson(); + String msg = panelGroup.getName(); + + + List msgParam = new ArrayList(); + msgParam.add(panelGroupId); + addUserIdSet.forEach(userId -> { + if (!redUserIdSet.contains(userId)){ + DeMsgutil.sendMsg(userId, 0, user.getNickName()+" 分享了仪表板【"+msg+"】,请查收!", gson.toJson(msgParam)); + } + }); + + redUserIdSet.forEach(userId -> { + if (!addUserIdSet.contains(userId)){ + DeMsgutil.sendMsg(userId, 0, user.getNickName()+" 取消分享了仪表板【"+msg+"】,请查收!", gson.toJson(msgParam)); + } + }); + + } + + private void buildRedAuthURD(Integer type, List redIds , AuthURD authURD) { + if (type == 0) { + authURD.setUserIds(redIds); + } + if (type == 1) { + authURD.setRoleIds(redIds); + } + if (type == 2) { + authURD.setDeptIds(redIds); + } + } + + /** + * + * @param newTargets 新的分享目标 + * @param shareNodes 已景分享目标 + * @return + */ + private Map filterData(List newTargets, List shareNodes) { + + Map result = new HashMap<>(); + /*if (null == newTargets) { + result.put("add", new ArrayList<>()); + result.put("red", new ArrayList<>()); + return result; + }*/ + List newUserIds = new ArrayList<>(); + for (int i = 0; i < newTargets.size(); i++) { + Long newTargetId = newTargets.get(i); + Boolean isNew = true; + for (int j = 0; j < shareNodes.size(); j++) { + TempShareNode shareNode = shareNodes.get(j); + Long sharedId = shareNode.getTargetId(); + if (newTargetId == sharedId) { + shareNode.setMatched(true); // 已分享 重新命中 + isNew = false; + } + } + if (isNew) { + // 获取新增的 + newUserIds.add(newTargetId); + } + } + //获取需要取消分享的 + List missNodes = shareNodes.stream().filter(item -> !item.getMatched()).collect(Collectors.toList()); + result.put("add", newUserIds); + result.put("red", missNodes); + return result; + } + + @Data + private class TempShareNode { + private Long shareId; + private Integer type; + private Long targetId; + private Boolean matched = false; + + public boolean targetMatch(Long tid) { + return targetId == tid; + } + } + + private TempShareNode convertNode(PanelShare panelShare) { + return BeanUtils.copyBean(new TempShareNode(), panelShare); + } + + @Transactional public void save(PanelShareRequest request){ List panelGroups = queryGroup(request.getPanelIds()); diff --git a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java index e633df73e7..4cc28fca08 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysAuthService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysAuthService.java @@ -1,144 +1,19 @@ package io.dataease.service.sys; -import io.dataease.auth.api.dto.CurrentUserDto; -import io.dataease.base.domain.SysAuth; -import io.dataease.base.domain.SysAuthDetail; -import io.dataease.base.mapper.SysAuthMapper; -import io.dataease.base.mapper.ext.ExtSysAuthDetailMapper; import io.dataease.base.mapper.ext.ExtSysAuthMapper; -import io.dataease.base.mapper.ext.ExtVAuthModelMapper; -import io.dataease.commons.constants.SystemConstants; import io.dataease.commons.utils.AuthUtils; -import io.dataease.controller.request.BaseTreeRequest; -import io.dataease.controller.request.SysAuthRequest; -import io.dataease.dto.SysAuthDetailDTO; -import io.dataease.dto.VAuthModelDTO; import io.dataease.i18n.Translator; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.*; -import java.util.stream.Collectors; - -import static java.util.stream.Collectors.groupingBy; @Service public class SysAuthService { - @Resource private ExtSysAuthMapper extSysAuthMapper; - @Resource - private SysAuthMapper sysAuthMapper; - - @Resource - private ExtSysAuthDetailMapper extSysAuthDetailMapper; - - @Resource - private ExtVAuthModelMapper extVAuthModelMapper; - - - private static List PRI_MODEL_TYPE = Arrays.asList("link", "dataset", "chart", "panel", "menu"); - - - - /** - * @Description: 查询可见授权数据的数据如果是管理员(IsAdmin = true)且modelType 为link dataset chart panel menu可以查询到所有的数据, - * 如果是普通用户,只能查询到自己的数据;但是 node_type 为spine 时 节点也会返回 - **/ - public List searchAuthModelTree(BaseTreeRequest request) { - CurrentUserDto currentUserDto = AuthUtils.getUser(); - request.setCreateBy(String.valueOf(currentUserDto.getUserId())); - if (PRI_MODEL_TYPE.contains(request.getModelType()) && (currentUserDto.getIsAdmin() == null || !currentUserDto.getIsAdmin())) { - request.setWithAuth("1"); - } else { - request.setWithAuth("0"); - } - return extVAuthModelMapper.searchTree(request); - } - - - /** - * @Description: 查询授权明细map - **/ - public Map> searchAuthDetails(SysAuthRequest request) { - List authDetailDTOList = extSysAuthMapper.searchAuth(request); - return Optional.ofNullable(authDetailDTOList).orElse(new ArrayList<>()).stream() - .collect(groupingBy(SysAuthDetailDTO::getAuthSource)); - } - - /** - * @Description: 每个类型的授权都会在表中预制各个授权项的模板 存在auth_id 中; - **/ - public List searchAuthDetailsModel(String authType) { - return extSysAuthDetailMapper.searchAuthTypeModel(authType); - } - - public void authChange(SysAuthRequest request) { - SysAuthDetail sysAuthDetail = request.getAuthDetail(); - //TODO 获取需要授权的资源id(当前节点和所有权限的下级节点) - List authSources = getAuthModels(request.getAuthSource(), request.getAuthSourceType()); - if (CollectionUtils.isEmpty(authSources)) { - throw new RuntimeException(Translator.get("i18n_auth_source_be_canceled")); - } - //TODO 获取需要被授权的目标id(部门当前节点和所有权限的下级节点) - List authTargets = getAuthModels(request.getAuthTarget(), request.getAuthTargetType()); - - if (CollectionUtils.isNotEmpty(authSources) && CollectionUtils.isNotEmpty(authTargets)) { - List authIdChange = new ArrayList<>(); - authTargets.stream().forEach(authTarget -> { - authSources.forEach(authSource -> { - String authId = checkAuth(authSource, request.getAuthSourceType(), authTarget, request.getAuthTargetType()); - authIdChange.add(authId); - }); - }); - // 授权修改 - if (sysAuthDetail.getPrivilegeValue() == SystemConstants.PRIVILEGE_VALUE.ON) { - //当前为开启1 >>> 关闭0 需要将权限级别(PrivilegeType)大于当前级别的全新都修改为关闭 0 - extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.OFF, sysAuthDetail.getPrivilegeType(), authIdChange); - } else { - //当前为关闭0 >>> 开启1 需要将权限级别(PrivilegeType)小于当前级别的全新都修改为开启 1 - extSysAuthDetailMapper.authDetailsChange(SystemConstants.PRIVILEGE_VALUE.ON, sysAuthDetail.getPrivilegeType(), authIdChange); - } - } - } - - private List getAuthModels(String id, String type) { - List vAuthModelDTOS = searchAuthModelTree(new BaseTreeRequest(id, type, SystemConstants.WITH_EXTEND.CHILDREN)); - List authSources = Optional.ofNullable(vAuthModelDTOS).orElse(new ArrayList<>()).stream().map(VAuthModelDTO::getId) - .collect(Collectors.toList()); - return authSources; - } - - /** - * @Description: 查询当前target 是否有存在授权 不存在 增加权限 并复制权限模板 - **/ - private String checkAuth(String authSource, String authSourceType, String authTarget, String authTargetType) { - String authId = extSysAuthMapper.findAuthId(authSource, authSourceType, authTarget, authTargetType); - if (StringUtils.isEmpty(authId)) { - authId = UUID.randomUUID().toString(); - //TODO 插入权限 - SysAuth sysAuthRecord = new SysAuth(); - sysAuthRecord.setId(authId); - sysAuthRecord.setAuthSource(authSource); - sysAuthRecord.setAuthSourceType(authSourceType); - sysAuthRecord.setAuthTarget(authTarget); - sysAuthRecord.setAuthTargetType(authTargetType); - sysAuthRecord.setAuthTime(System.currentTimeMillis()); - sysAuthRecord.setAuthUser(AuthUtils.getUser().getUsername()); - sysAuthMapper.insertSelective(sysAuthRecord); - - //TODO 复制权限模板 - extSysAuthDetailMapper.copyAuthModel(authSourceType, authId, AuthUtils.getUser().getUsername()); - } - - return authId; - } - public void checkTreeNoManageCount(String modelType,String nodeId){ if(extSysAuthMapper.checkTreeNoManageCount(AuthUtils.getUser().getUserId(),modelType,nodeId)){ throw new RuntimeException(Translator.get("i18n_no_all_delete_privilege_folder")); diff --git a/backend/src/main/resources/db/migration/V10__web_msg.sql b/backend/src/main/resources/db/migration/V10__web_msg.sql index dfb1d13e33..5702ecc48d 100644 --- a/backend/src/main/resources/db/migration/V10__web_msg.sql +++ b/backend/src/main/resources/db/migration/V10__web_msg.sql @@ -16,4 +16,16 @@ CREATE TABLE `sys_msg` ( KEY `inx_msg_userid` (`user_id`) USING BTREE, KEY `inx_msg_type` (`type`) USING BTREE, KEY `inx_msg_status` (`status`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='消息通知表'; \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='消息通知表'; + +BEGIN; +INSERT INTO `sys_menu` VALUES (53, 1, 3, 1, '站内消息', 'sys-msg-web', 'msg/index', 1000, 'all-msg', 'system-msg-web', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (54, 53, 0, 1, '所有消息', 'sys-msg-web-all', 'msg/all', 1, 'web-msg', 'all', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (55, 53, 0, 1, '未读消息', 'sys-msg-web-unread', 'msg/unread', 2, 'unread-msg', 'unread', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (56, 53, 0, 1, '已读消息', 'sys-msg-web-readed', 'msg/readed', 3, 'readed-msg', 'readed', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +COMMIT; + +BEGIN; +UPDATE `sys_menu` SET permission = null WHERE menu_id = 1; +COMMIT; + diff --git a/backend/src/main/resources/db/migration/V11__panel_view.sql b/backend/src/main/resources/db/migration/V11__panel_view.sql new file mode 100644 index 0000000000..79a30f603f --- /dev/null +++ b/backend/src/main/resources/db/migration/V11__panel_view.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS `panel_view`; +CREATE TABLE `panel_view` ( + `id` varchar(50) NOT NULL, + `panel_id` varchar(50) DEFAULT NULL COMMENT 'panel_id', + `chart_view_id` varchar(50) DEFAULT NULL COMMENT 'chart_view_id', + `content` blob COMMENT '内容', + `create_by` varchar(255) DEFAULT NULL COMMENT '创建人', + `create_time` bigint(13) DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(255) DEFAULT NULL COMMENT '更新人', + `update_time` bigint(13) DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/backend/src/main/resources/db/migration/V11__system_task.sql b/backend/src/main/resources/db/migration/V12__system_task.sql similarity index 100% rename from backend/src/main/resources/db/migration/V11__system_task.sql rename to backend/src/main/resources/db/migration/V12__system_task.sql diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index e0a4e80cf9..daa0be9874 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -261,4 +261,9 @@ i18n_sql_delete_not_matching=The data column of incremental delete SQL does not i18n_cst_ds_tb_or_field_deleted=Custom dataset union data is deleted or field changed,can not display 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=Excel exists repeat field,please fix and upload again. -i18n_schema_is_empty=Database schema is empty \ No newline at end of file +i18n_schema_is_empty=Database schema is empty +站内消息=Internal Messages +所有消息=All Messages +未读消息=Unread Messages +已读消息=Read Messages +i18n_data_not_sync=Please sync data first \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 4ab1ba93ff..0871efe0cd 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -261,3 +261,8 @@ i18n_cst_ds_tb_or_field_deleted=自定义数据集所关联数据被删除或字 i18n_no_all_delete_privilege_folder=该目录下存在没有管理权限或查看权限的资源,无法删除 i18n_excel_field_repeat=Excel存在重复字段,请修改后重新上传 i18n_schema_is_empty=数据库 Schema 为空 +站内消息=站内消息 +所有消息=所有消息 +未读消息=未读消息 +已读消息=已读消息 +i18n_data_not_sync=请先完成数据同步 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index a2653b9066..1dccd068c1 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -263,4 +263,9 @@ i18n_sql_delete_not_matching=增量刪除 sql 的數據列與數據集不匹配, i18n_cst_ds_tb_or_field_deleted=自定義數據集所關聯數據被刪除或字段發生變化,無法正常顯示 i18n_no_all_delete_privilege_folder=該目錄下存在沒有管理權限或查看權限的資源,無法刪除 i18n_excel_field_repeat=Excel存在重復字段,請修改後重新上傳 -i18n_schema_is_empty=數據庫 Schema 為空 \ No newline at end of file +i18n_schema_is_empty=數據庫 Schema 為空 +站内消息=站內消息 +所有消息=所有消息 +未读消息=未讀消息 +已读消息=已讀消息 +i18n_data_not_sync=請先完成數據同步 \ No newline at end of file diff --git a/frontend/src/api/chart/chart.js b/frontend/src/api/chart/chart.js index 81b76ef1eb..77945e5f17 100644 --- a/frontend/src/api/chart/chart.js +++ b/frontend/src/api/chart/chart.js @@ -35,3 +35,19 @@ export function chartCopy(id) { loading: true }) } +export function chartGroupTree(data) { + return request({ + url: '/chart/group/tree', + method: 'post', + loading: true, + data + }) +} + +export function searchAdviceSceneId(panelId) { + return request({ + url: '/chart/view/searchAdviceSceneId/' + panelId, + method: 'get', + loading: true + }) +} diff --git a/frontend/src/api/panel/share.js b/frontend/src/api/panel/share.js index d463ea3b99..61c808b476 100644 --- a/frontend/src/api/panel/share.js +++ b/frontend/src/api/panel/share.js @@ -27,3 +27,12 @@ export function loadTree(data) { }) } +export function fineSave(data) { + return request({ + url: '/api/share/fineSave', + method: 'post', + loading: true, + data + }) +} + diff --git a/frontend/src/api/system/msg.js b/frontend/src/api/system/msg.js index 6b4638fc7d..0f4cc70dfe 100644 --- a/frontend/src/api/system/msg.js +++ b/frontend/src/api/system/msg.js @@ -4,7 +4,7 @@ export function query(pageIndex, pageSize, data) { return request({ url: '/api/sys_msg/list/' + pageIndex + '/' + pageSize, method: 'post', - loading: true, + loading: false, data }) } @@ -17,3 +17,12 @@ export function updateStatus(msgId) { }) } +export function batchRead(data) { + return request({ + url: '/api/sys_msg/batchRead', + method: 'post', + loading: true, + data + }) +} + diff --git a/frontend/src/components/Notification/index.vue b/frontend/src/components/Notification/index.vue index f4ccc0e370..1d2a307a31 100644 --- a/frontend/src/components/Notification/index.vue +++ b/frontend/src/components/Notification/index.vue @@ -41,9 +41,9 @@ -
+
- {{ $t('webmsg.show_more') }} + {{ $t('webmsg.show_more') }}
@@ -62,6 +62,8 @@