Quellcode durchsuchen

优化dashboard

zhouhao vor 7 Jahren
Ursprung
Commit
dd91dbed39

+ 4 - 0
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-api/src/main/java/org/hswebframework/web/dashboard/DashBoardConfigEntity.java

@@ -25,6 +25,10 @@ public class DashBoardConfigEntity extends SimpleGenericEntity<String> implement
 
     private String scriptLanguage;
 
+    private String permission;
+
+    private Boolean defaultConfig;
+
     private DataStatusEnum status;
 
     @NotBlank(groups = CreateGroup.class)

+ 3 - 1
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/dashboard/DashBoardConfigMapper.xml

@@ -10,14 +10,16 @@
         <result property="template" column="template" javaType="String" jdbcType="CLOB"/>
         <result property="script" column="script" javaType="String" jdbcType="CLOB"/>
         <result property="scriptLanguage" column="script_lang" javaType="String" jdbcType="VARCHAR"/>
+        <result property="permission" column="permission" javaType="String" jdbcType="VARCHAR"/>
         <result property="creatorId" column="creator_id" javaType="String" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" javaType="Date" jdbcType="TIMESTAMP"/>
+        <result property="defaultConfig" column="is_default" javaType="Boolean" jdbcType="INTEGER"/>
         <result property="status" column="status" javaType="org.hswebframework.web.commons.entity.DataStatusEnum" jdbcType="INTEGER"/>
     </resultMap>
 
     <!--用于动态生成sql所需的配置-->
     <sql id="config">
-        <bind name="resultMapId" value="'TemplateResultMap'"/>
+        <bind name="resultMapId" value="'DashBoardConfigEntityResultMap'"/>
         <bind name="tableName" value="'s_dashboard_conf'"/>
     </sql>
 

+ 0 - 52
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-local/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/template/DashBoardConfigMapper.xml

@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.hswebframework.web.dashboard.local.dao.DashBoardConfigDao">
-    <resultMap id="DashBoardConfigEntityResultMap" type="org.hswebframework.web.dashboard.DashBoardConfigEntity">
-        <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
-        <result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
-        <result property="type" column="type" javaType="String" jdbcType="VARCHAR"/>
-        <result property="template" column="template" javaType="String" jdbcType="CLOB"/>
-        <result property="script" column="script" javaType="String" jdbcType="CLOB"/>
-        <result property="scriptLanguage" column="script_lang" javaType="String" jdbcType="VARCHAR"/>
-        <result property="creatorId" column="creator_id" javaType="String" jdbcType="VARCHAR"/>
-        <result property="createTime" column="create_time" javaType="Date" jdbcType="TIMESTAMP"/>
-        <result property="status" column="status" javaType="org.hswebframework.web.commons.entity.DataStatusEnum" jdbcType="VARCHAR"/>
-    </resultMap>
-
-    <!--用于动态生成sql所需的配置-->
-    <sql id="config">
-        <bind name="resultMapId" value="'TemplateResultMap'"/>
-        <bind name="tableName" value="'s_dashboard_conf'"/>
-    </sql>
-
-    <insert id="insert" parameterType="org.hswebframework.web.dashboard.DashBoardConfigEntity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildInsertSql"/>
-    </insert>
-
-    <delete id="deleteByPk" parameterType="String">
-        delete from s_dashboard_conf where u_id =#{id}
-    </delete>
-
-    <delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildDeleteSql"/>
-    </delete>
-
-    <update id="update" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildUpdateSql"/>
-    </update>
-
-    <select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="DashBoardConfigEntityResultMap">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildSelectSql"/>
-    </select>
-
-    <select id="count" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildTotalSql"/>
-    </select>
-</mapper>

+ 1 - 1
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,3 @@
 # Auto Configure
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.hswebframework.web.dashboard.starter.DashboadAutoConfiguration
+org.hswebframework.web.dashboard.starter.DashboardAutoConfiguration

+ 5 - 2
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-starter/src/main/resources/hsweb-starter.js

@@ -18,6 +18,7 @@ var versions = [
     // }
 ];
 var JDBCType = java.sql.JDBCType;
+
 function install(context) {
     var database = context.database;
     database.createOrAlter("s_dashboard_conf")
@@ -26,13 +27,15 @@ function install(context) {
         .addColumn().name("type").alias("type").comment("配置类型").jdbcType(java.sql.JDBCType.VARCHAR).length(32).commit()
         .addColumn().name("template").alias("template").comment("模板").jdbcType(java.sql.JDBCType.CLOB).commit()
         .addColumn().name("script").alias("script").comment("脚本").jdbcType(java.sql.JDBCType.CLOB).commit()
-        .addColumn().name("script_lang").alias("scriptLanguage").comment("脚本语言").jdbcType(java.sql.JDBCType.CLOB).commit()
+        .addColumn().name("script_lang").alias("scriptLanguage").comment("脚本语言").varchar(32).commit()
+        .addColumn().name("permission").alias("permission").comment("权限设置").varchar(512).commit()
         .addColumn().name("creator_id").alias("creatorId").comment("创建人").varchar(32).commit()
         .addColumn().name("create_time").alias("createTime").comment("创建时间").datetime().commit()
         .addColumn().name("status").alias("status").comment("状态").number(4).commit()
-
+        .addColumn().name("is_default").alias("defaultConfig").comment("是否默认").number(2).commit()
         .comment("模板").commit();
 }
+
 //设置依赖
 dependency.setup(info)
     .onInstall(install)

+ 5 - 0
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/pom.xml

@@ -27,5 +27,10 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-system-authorization-service-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>

+ 109 - 0
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/src/main/java/org/hswebframework/web/controller/dashboard/DashBoardUserConfigController.java

@@ -0,0 +1,109 @@
+package org.hswebframework.web.controller.dashboard;
+
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.hswebframework.web.authorization.Authentication;
+import org.hswebframework.web.authorization.AuthenticationPredicate;
+import org.hswebframework.web.authorization.annotation.Authorize;
+import org.hswebframework.web.controller.dashboard.model.UserDashBoardResponse;
+import org.hswebframework.web.controller.message.ResponseMessage;
+import org.hswebframework.web.dashboard.DashBoardConfigEntity;
+import org.hswebframework.web.dashboard.DashBoardService;
+import org.hswebframework.web.dashboard.executor.DashBoardExecutor;
+import org.hswebframework.web.entity.authorization.UserSettingEntity;
+import org.hswebframework.web.service.authorization.UserSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.PostConstruct;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@RestController
+@RequestMapping("/dashboard-user")
+@Api(tags = "仪表盘-用户配置", value = "仪表盘用户配置")
+@Authorize
+public class DashBoardUserConfigController {
+
+    @Autowired
+    private UserSettingService userSettingService;
+
+    @Autowired
+    private DashBoardService dashBoardService;
+
+    @Autowired
+    private DashBoardExecutor dashBoardExecutor;
+
+    @Autowired(required = false)
+    private Executor executor;
+
+    @PostConstruct
+    public void init() {
+        executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
+    }
+
+    @GetMapping("/all")
+    @ApiOperation("获取用户可选择的仪表盘配置")
+    public ResponseMessage<List<UserDashBoardResponse>> getUserAllDashBoardConfig(Authentication authentication) {
+        List<UserDashBoardResponse> configList = dashBoardService.select()
+                .stream()
+                .filter(Objects::nonNull)
+                //过滤权限
+                .filter(config -> StringUtils.isEmpty(config) ||
+                        AuthenticationPredicate.has(config.getPermission()).test(authentication))
+                .map(config -> config.copyTo(new UserDashBoardResponse()))
+                .collect(Collectors.toList());
+        return ResponseMessage.ok(configList);
+    }
+
+    @GetMapping
+    @ApiOperation("获取用户自定义的仪表盘配置")
+    public ResponseMessage<List<UserDashBoardResponse>> getUserConfigDashBoardConfig(Authentication authentication) {
+        UserSettingEntity settingEntity = userSettingService.selectByUser(authentication.getUser().getId(), "dashboard-config", "current");
+        if (settingEntity == null) {
+            return ResponseMessage.ok(Collections.emptyList());
+        }
+
+        List<String> ids = JSON.parseArray(settingEntity.getSetting(), String.class);
+
+        List<UserDashBoardResponse> configList = ids
+                .parallelStream()
+                .map(dashBoardService::selectByPk) //为什么要单个查询不用批量查询?因为单个查询有缓存
+                .filter(Objects::nonNull)
+                //过滤权限
+                .filter(config -> StringUtils.isEmpty(config) ||
+                        AuthenticationPredicate.has(config.getPermission()).test(authentication))
+                .map(config -> config.copyTo(new UserDashBoardResponse()))
+                .sorted(Comparator.comparing(conf -> ids.indexOf(conf.getId())))
+                .collect(Collectors.toList());
+
+        return ResponseMessage.ok(configList);
+    }
+
+    @PutMapping
+    @ApiOperation("保存用户自定义的仪表盘配置")
+    public ResponseMessage<Void> saveUserDashBoardConfig(@RequestBody List<String> configIdList, Authentication authentication) {
+        UserSettingEntity settingEntity = userSettingService.selectByUser(authentication.getUser().getId(), "dashboard-config", "current");
+        if (settingEntity == null) {
+            settingEntity = userSettingService.createEntity();
+            settingEntity.setUserId(authentication.getUser().getId());
+            settingEntity.setKey("dashboard-config");
+            settingEntity.setSettingId("current");
+        }
+        settingEntity.setSetting(JSON.toJSONString(configIdList));
+        userSettingService.saveOrUpdate(settingEntity);
+
+        return ResponseMessage.ok();
+    }
+}

+ 20 - 0
hsweb-system/hsweb-system-dashboard/hsweb-system-dashboard-web/src/main/java/org/hswebframework/web/controller/dashboard/model/UserDashBoardResponse.java

@@ -0,0 +1,20 @@
+package org.hswebframework.web.controller.dashboard.model;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+@Data
+@ApiModel("用户自定义仪表盘配置")
+public class UserDashBoardResponse {
+    private String id;
+
+    private String type;
+
+    private String template;
+
+    private Object data;
+}