Просмотр исходного кода

Merge branch 'feature-refactor' of ssh://10.10.100.21/source/platform-bi-server into feature-refactor

zhuth 6 лет назад
Родитель
Сommit
88170718e6
33 измененных файлов с 803 добавлено и 86 удалено
  1. 5 0
      bi-auth/src/main/java/com/usoftchina/bi/auth/interceptor/SecurityInterceptor.java
  2. 9 0
      bi-core/src/main/java/com/usoftchina/bi/core/base/BaseContextHolder.java
  3. 33 0
      bi-core/src/main/java/com/usoftchina/bi/core/base/RoleConstant.java
  4. 0 1
      bi-server/src/main/java/com/usoftchina/bi/server/Application.java
  5. 1 0
      bi-server/src/main/java/com/usoftchina/bi/server/aspect/JwtTokenAspect.java
  6. 41 0
      bi-server/src/main/java/com/usoftchina/bi/server/controller/common/UASController.java
  7. 2 2
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardsController.java
  8. 2 2
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataBasesController.java
  9. 18 2
      bi-server/src/main/java/com/usoftchina/bi/server/controller/user/UserPowerController.java
  10. 3 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ChartsConfigMapper.java
  11. 91 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/common/UASMapper.java
  12. 33 3
      bi-server/src/main/java/com/usoftchina/bi/server/dao/dashboard/DashBoardMenuMapper.java
  13. 13 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/dataSource/DataConnectorMapper.java
  14. 19 4
      bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserMapper.java
  15. 31 2
      bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserPowerMapper.java
  16. 85 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/po/RefreshData.java
  17. 49 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/po/SyncData.java
  18. 59 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/vo/configVo/BatchUserPowerInfo.java
  19. 29 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DashboardCopyInfo.java
  20. 38 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DashboardPowerDTO.java
  21. 12 1
      bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DataSourceCopyInfo.java
  22. 7 12
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ChartsConfigService.java
  23. 108 0
      bi-server/src/main/java/com/usoftchina/bi/server/service/common/UASService.java
  24. 20 7
      bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashBoardMenuService.java
  25. 24 19
      bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsService.java
  26. 7 7
      bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataBasesService.java
  27. 22 16
      bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataConnectorService.java
  28. 29 2
      bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserPowerService.java
  29. 5 0
      bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserService.java
  30. 1 1
      bi-server/src/main/resources/application-N_MALATA_ZZ.properties
  31. 3 1
      bi-server/src/main/resources/application-dev.properties
  32. 2 2
      bi-server/src/main/resources/application-yitoa.properties
  33. 2 2
      bi-server/src/main/resources/application.properties

+ 5 - 0
bi-auth/src/main/java/com/usoftchina/bi/auth/interceptor/SecurityInterceptor.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usoftchina.bi.auth.annotation.Auth;
 import com.usoftchina.bi.core.base.RepCode;
 import com.usoftchina.bi.core.base.RepEntity;
+import com.usoftchina.bi.core.base.RoleConstant;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.core.utils.JsonUtils;
 import org.slf4j.Logger;
@@ -47,6 +48,10 @@ public class SecurityInterceptor implements HandlerInterceptor {
         String token = request.getHeader("token");
         Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
         logger.info("authRole={},userRole={}", admin, resultMap.get("role"));
+        //超级管理员跳过认证
+        if (RoleConstant.SUPER_ADMIN.getRole().equals(resultMap.get("role"))) {
+            return true;
+        }
         if (!admin.equals(resultMap.get("role"))) {
             returnErrorMessage(request, response, RepCode.NoAuthority);
             return false;

+ 9 - 0
bi-core/src/main/java/com/usoftchina/bi/core/base/BaseContextHolder.java

@@ -47,4 +47,13 @@ public class BaseContextHolder {
     public static void setUserName(String userName) {
         set("userName", userName);
     }
+
+    public static String getRole(){
+        Object value = get("role");
+        return String.valueOf(value);
+    }
+
+    public static void setRole(String role){
+        set("role", role);
+    }
 }

+ 33 - 0
bi-core/src/main/java/com/usoftchina/bi/core/base/RoleConstant.java

@@ -0,0 +1,33 @@
+package com.usoftchina.bi.core.base;
+
+/**
+ * 角色枚举类
+ * @Author chenwei
+ * @Date 2019-05-15
+ */
+public enum RoleConstant {
+
+    /**
+     * 超级管理员
+     */
+    SUPER_ADMIN("superAdmin"),
+    /**
+     * 管理员
+     */
+    ADMIN("admin"),
+    /**
+     * 普通用户
+     */
+    NORMAL("normal");
+
+    String role;
+
+    RoleConstant(String role) {
+        this.role = role;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+}

+ 0 - 1
bi-server/src/main/java/com/usoftchina/bi/server/Application.java

@@ -14,7 +14,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 @SpringBootApplication
 @EnableSwagger2
 @Import({DynamicDataSourceRegister.class})
-@EnableCaching
 @EnableScheduling
 @ComponentScan("com.usoftchina.bi")
 public class Application {

+ 1 - 0
bi-server/src/main/java/com/usoftchina/bi/server/aspect/JwtTokenAspect.java

@@ -94,6 +94,7 @@ public class JwtTokenAspect {
         }
         BaseContextHolder.setUserId(Integer.valueOf(jwt.getClaim("id").asString()));
         BaseContextHolder.setUserName(jwt.getClaim("name").asString());
+        BaseContextHolder.setRole(jwt.getClaim("role").asString());
         return jwt.getClaims();
     }
 }

+ 41 - 0
bi-server/src/main/java/com/usoftchina/bi/server/controller/common/UASController.java

@@ -0,0 +1,41 @@
+package com.usoftchina.bi.server.controller.common;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.bi.core.base.RepCode;
+import com.usoftchina.bi.core.base.RepEntity;
+import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.model.po.MessageLog;
+import com.usoftchina.bi.server.model.po.RefreshData;
+import com.usoftchina.bi.server.model.po.SyncData;
+import com.usoftchina.bi.server.model.pojo.annotation.CheckToken;
+import com.usoftchina.bi.server.service.common.MessageLogService;
+import com.usoftchina.bi.server.service.common.UASService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author hy
+ * @Date 2019-05-15
+ */
+@RestController
+@RequestMapping("/uas")
+@Api(description = "UAS调用接口")
+public class UASController {
+
+    @Autowired
+    private UASService uasService;
+
+    @PostMapping("/refreshData")
+    public String refreshData(@RequestBody RefreshData refreshData){
+        return uasService.refreshData(refreshData);
+    }
+
+    @PostMapping("/sync")
+    public String sync(@RequestBody SyncData syncData){
+        return uasService.sync(syncData);
+    }
+
+}

+ 2 - 2
bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardsController.java

@@ -34,7 +34,7 @@ public class DashboardsController {
      */
     @ApiOperation(value = "保存看板", notes = "保存看板", response = RepEntity.class)
     @CheckToken
-    @Log(module = "看板", name = "#body.bdName", token = "#token")
+    @Log(module = "报表", name = "#body.bdName", token = "#token")
     @PostMapping("/inputDashboards")
     public RepEntity saveDashboards(@RequestHeader String token, @RequestBody DashboardsInfo body){
         return dashboardsService.setDashboards(token, body);
@@ -45,7 +45,7 @@ public class DashboardsController {
      */
     @ApiOperation(value = "更新看板", notes = "更新看板", response = RepEntity.class)
     @CheckToken
-    @Log(module = "看板", name = "#body.bdName", token = "#token")
+    @Log(module = "报表", name = "#body.bdName", token = "#token")
     @PostMapping("/updateDashboards")
     public RepEntity updateDashboards(@RequestHeader String token,@RequestBody DashboardsInfo body){
         return dashboardsService.updateDashboards(token, body);

+ 2 - 2
bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataBasesController.java

@@ -29,7 +29,7 @@ public class DataBasesController {
     @ApiOperation(value = "保存数据库配置", notes = "保存数据库配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
-    @Log(module = "数据接", name = "#body.name", token = "#token")
+    @Log(module = "数据接", name = "#body.name", token = "#token")
     @PostMapping("/inputDatabases")
     public RepEntity saveDatabases(@RequestHeader String token, @RequestBody DatabasesInfo body){
         return dataBasesService.inputDatabases(body);
@@ -63,7 +63,7 @@ public class DataBasesController {
     @ApiOperation(value = "更新数据库配置", notes = "更新数据库配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
-    @Log(module = "数据接", name = "#databasesInfo.name", token = "#token")
+    @Log(module = "数据接", name = "#databasesInfo.name", token = "#token")
     @PostMapping("/updatabases")
     public RepEntity updateDatabases(@RequestHeader String token,@RequestBody DatabasesInfo databasesInfo){
         return dataBasesService.updatabases(databasesInfo);

+ 18 - 2
bi-server/src/main/java/com/usoftchina/bi/server/controller/user/UserPowerController.java

@@ -3,6 +3,7 @@ package com.usoftchina.bi.server.controller.user;
 import com.usoftchina.bi.core.base.RepCode;
 import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.server.model.pojo.annotation.CheckToken;
+import com.usoftchina.bi.server.model.vo.configVo.BatchUserPowerInfo;
 import com.usoftchina.bi.server.model.vo.configVo.UserPowerInfo;
 import com.usoftchina.bi.server.service.user.UserPowerService;
 import io.swagger.annotations.Api;
@@ -40,8 +41,7 @@ public class UserPowerController {
     @CheckToken
     @ApiOperation(value = "获取用户(组)报表权限", notes = "获取用户(组)报表权限", response = RepEntity.class)
     public RepEntity read(@RequestHeader String token, @PathVariable("type") int type, @PathVariable("id") int id) {
-        userPowerService.read(type, id);
-        return new RepEntity(RepCode.success);
+        return new RepEntity(RepCode.success, userPowerService.read(type, id));
     }
 
     @PostMapping("/delete")
@@ -52,4 +52,20 @@ public class UserPowerController {
         return new RepEntity(RepCode.success);
     }
 
+    @PostMapping("/batchAdd")
+    @CheckToken
+    @ApiOperation(value = "批量新增用户(组)报表权限", notes = "批量新增用户(组)报表权限", response = RepEntity.class)
+    public RepEntity batchAdd(@RequestHeader String token, @RequestBody BatchUserPowerInfo batchUserPowerInfo){
+        userPowerService.batchAdd(batchUserPowerInfo);
+        return new RepEntity(RepCode.success);
+    }
+
+    @PostMapping("/batchDelete")
+    @CheckToken
+    @ApiOperation(value = "批量删除用户(组)报表权限", notes = "批量删除用户(组)报表权限", response = RepEntity.class)
+    public RepEntity batchDelete(@RequestHeader String token, @RequestBody BatchUserPowerInfo batchUserPowerInfo){
+        userPowerService.batchDelete(batchUserPowerInfo);
+        return new RepEntity(RepCode.success);
+    }
+
 }

+ 3 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ChartsConfigMapper.java

@@ -103,6 +103,9 @@ public interface ChartsConfigMapper {
             "    ))")
     List<ChartConfigList> getListByUser(@Param("id") int id, TestPage testPage);
 
+    @Select("")
+    List<ChartConfigList> getListWithoutLimit(@Param("id") int id, TestPage testPage);
+
     /*
     通过Id查找表名
     */

+ 91 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/common/UASMapper.java

@@ -0,0 +1,91 @@
+package com.usoftchina.bi.server.dao.common;
+
+import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.model.po.Databases;
+import com.usoftchina.bi.server.model.po.MessageLog;
+import com.usoftchina.bi.server.model.po.RefreshData;
+import com.usoftchina.bi.server.model.po.User;
+import com.usoftchina.bi.server.model.vo.configVo.DatabasesInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DashboardCopyInfo;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.mapping.StatementType;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+@Repository
+public interface UASMapper {
+
+    /**
+     * 调用存储过程,从UAS_BI标准数据库同步表和数据过来
+     */
+    @Select({ "call SP_BI_REFRESHDATA(#{sob,mode=IN,jdbcType=VARCHAR},"
+            + "#{address,mode=IN,jdbcType=VARCHAR},"
+            + "#{port,mode=IN,jdbcType=VARCHAR},"
+            + "#{sid,mode=IN,jdbcType=VARCHAR},"
+            + "#{em_id,mode=IN,jdbcType=VARCHAR},"
+            + "#{em_code,mode=IN,jdbcType=VARCHAR},"
+            + "#{em_name,mode=IN,jdbcType=VARCHAR},"
+            + "#{sob_name,mode=IN,jdbcType=VARCHAR},"
+            + "#{res,mode=OUT,jdbcType=VARCHAR})" })
+    @Options(statementType=StatementType.CALLABLE)
+    String sp_refreshdata(RefreshData refreshData);
+
+    /**
+     * 校验账套的数据源是否存在
+     */
+    @Select({ "SELECT COUNT(*) FROM BI_DATABASES where USER_NAME = #{from}" })
+    int checkDataBase(String from);
+
+    /**
+     * 获取数链接
+     */
+    @Select({ "SELECT * BI_DATABASES where id = #{id}" })
+    Databases getDataBase(String id);
+
+    //插入数据源
+    @Insert("INSERT INTO BI_DATABASES(ID,BASES_NAME,ADDRASS,PORT,DATABASE_TYPE,DATA_NAME,USER_NAME,PASS_WORD,CREATE_DATE,UPDATE_DATE,NOTE) "
+            +       "SELECT "
+            +           "#{id, jdbcType=INTEGER},#{name},ADDRASS,PORT,DATABASE_TYPE,DATA_NAME,#{sob},PASS_WORD,CREATE_DATE,UPDATE_DATE,NOTE "
+            +       "FROM BI_DATABASES where id = #{mainid}")
+    @SelectKey(before=true,keyProperty="id",resultType=int.class,statement="SELECT BI_DATABASES_sequence.nextval from dual",keyColumn = "id")
+    void insertDataBase(@Param("name") String name ,@Param("sob") String sob ,@Param("mainid") String mainid);
+
+    //获取所有单个数据链接的报表 且编号符合  xxxx_xxxx_账套str
+    @Select({ "select DASHBOARD_ID dashboardId,ID dataSourceId,'_副本' lastName,BD_CODE newCode  from (select MAX(BD_CODE) BD_CODE,DASHBOARD_ID,count(*),max(BI_DATABASES.id) id,max(BI_DATABASES.USER_NAME) USER_NAME " +
+            "from BI_DATABASES " +
+            "left join BI_DATA_CONNECTORS on DB_CONFIG = BI_DATABASES.id  " +
+            "left join BI_CHARTS on BI_CHARTS.BD_DATA_ID = BI_DATA_CONNECTORS.ID " +
+            "left join BI_DASHBOARDS_CHART on BI_DASHBOARDS_CHART.CHART_ID = BI_CHARTS.id " +
+            "LEFT JOIN BI_DASHBOARDS ON BI_DASHBOARDS.ID = BI_DASHBOARDS_CHART.DASHBOARD_ID " +
+            "group by DASHBOARD_ID " +
+            "having count(*)=1) x " +
+            "where X.USER_NAME = #{from} AND REGEXP_LIKE (nvl(BD_CODE,' '), '([[:alnum:]]+_){2}')" })
+    List<DashboardCopyInfo> getFromSobDashboard(@Param("from") String from);
+
+    /**
+     * 查询数据链接
+     * @return
+     */
+    @Select("SELECT id,BASES_NAME name,addrass,port,DATABASE_TYPE databaseType,DATA_NAME dataName,USER_NAME userName,PASS_WORD passWord,note FROM BI_DATABASES where id = #{id}")
+    DatabasesInfo getDatabasesInfo(@Param("id") String id);
+
+    /**
+     * 调用存储过程,刷新数据链接后缀
+     */
+    @Select({ "call SP_BI_SYNC(#{from,mode=IN,jdbcType=VARCHAR},"
+            + "#{res,mode=OUT,jdbcType=VARCHAR})" })
+    @Options(statementType=StatementType.CALLABLE)
+    String sp_sync(@Param("from") String from,@Param("res") String res);
+
+    /**
+     * 调用存储过程,删除目标账套所有报表配置(除数据链接)
+     */
+    @Select({ "call SP_BI_CLEAN_SOB(#{from,mode=IN,jdbcType=VARCHAR},"
+            + "#{res,mode=OUT,jdbcType=VARCHAR})" })
+    @Options(statementType=StatementType.CALLABLE)
+    String sp_clean_sob(@Param("from") String from,@Param("res") String res);
+}

+ 33 - 3
bi-server/src/main/java/com/usoftchina/bi/server/dao/dashboard/DashBoardMenuMapper.java

@@ -13,11 +13,31 @@ import java.util.List;
 @Repository
 public interface DashBoardMenuMapper {
 
+    /**
+     * 普通用户/管理员查看
+     * @param userId
+     * @param id
+     * @return
+     */
     @Select("SELECT BDM_ID id,BDM_NAME name,'menu' type,BDM_PARENTID parentId FROM BI_DASHBOARDS_MENU WHERE BDM_PARENTID = #{id, jdbcType=INTEGER} "
-            + "UNION ALL "
-            + "SELECT ID id,BD_NAME name,'dashboard' type,BD_MENUID parentId FROM BI_DASHBOARDS WHERE BD_MENUID = #{id, jdbcType=INTEGER} AND CREATE_ID = #{userId,jdbcType=INTEGER}")
+            + " UNION "
+            + " SELECT ID id,BD_NAME name,'dashboard' type,BD_MENUID parentId FROM BI_DASHBOARDS WHERE BD_MENUID = #{id, jdbcType=INTEGER} AND CREATE_ID = #{userId,jdbcType=INTEGER} "
+            + " UNION "
+            + " SELECT ID id,BD_NAME name,'dashboard' type,BD_MENUID parentId FROM BI_POWER_USERS INNER JOIN BI_DASHBOARDS ON ID = BPU_DASHBOARDID WHERE BPU_USERID = #{userId,jdbcType=INTEGER} "
+            + " UNION "
+            + " SELECT ID id,BD_NAME name,'dashboard' type,BD_MENUID parentId FROM BI_POWER_USERS INNER JOIN BI_DASHBOARDS ON ID = BPU_DASHBOARDID WHERE BPU_USERGROUPID IN (SELECT BR_USER_GROUP FROM BI_USER_REL_GROUPS WHERE BR_USER_ID = #{userId,jdbcType=INTEGER}) ")
     List<DashboardMenuRespDTO> getMenuById(@Param("userId") int userId, @Param("id") int id);
 
+    /**
+     * 超级用户查看
+     * @param id
+     * @return
+     */
+    @Select("SELECT BDM_ID id,BDM_NAME name,'menu' type,BDM_PARENTID parentId FROM BI_DASHBOARDS_MENU WHERE BDM_PARENTID = #{id, jdbcType=INTEGER} "
+            + " UNION "
+            + " SELECT ID id,BD_NAME name,'dashboard' type,BD_MENUID parentId FROM BI_DASHBOARDS WHERE BD_MENUID = #{id, jdbcType=INTEGER} ")
+    List<DashboardMenuRespDTO> getMenuWithNoLimit(int id);
+
     /**
      * 保存
      * @param dashBoardMenuInfo
@@ -71,7 +91,7 @@ public interface DashBoardMenuMapper {
     void updateDashBoardMenu(DashBoardUpdateMenuInfo dashBoardUpdateMenuInfo);
 
     /**
-     * 获取目录下的所有看板
+     * 普通用户/管理员 获取目录下的所有看板
      * @param userId
      * @param menuId
      * @return
@@ -82,4 +102,14 @@ public interface DashBoardMenuMapper {
             + "AND CREATE_ID = #{userId,jdbcType=INTEGER}")
     List<Dashboards> getDashBoardByMenuId(@Param("userId") int userId, @Param("menuId") int menuId);
 
+    /**
+     * 超级用户 获取目录下的所有看板
+     * @param menuId
+     * @return
+     */
+    @Select("SELECT id, bd_note as bdNote, bd_name as bdName, CONFIGURATION as bdConfiguration, CREATE_BY as createBy, "
+            + "create_id as createId, CREATE_DATE as createDate, BD_THUMBNAIL as thumbnail, relation_columns as relationColumns, "
+            + "filters, demo, bd_code as bdCode,BD_MENUID as menuId  FROM BI_DASHBOARDS WHERE BD_MENUID = #{menuId,jdbcType=INTEGER} ")
+    List<Dashboards> getDashBoardByMenuIdWithoutLimit(@Param("menuId") int menuId);
+
 }

+ 13 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/dataSource/DataConnectorMapper.java

@@ -94,6 +94,19 @@ public interface DataConnectorMapper {
     List<DataConnectorList> getDataConnectorList(@Param("id") int id, TestPage testPage);
 
 
+    /**
+     * 查询已经启用的数据源列表
+     * @param id
+     * @param testPage
+     * @return
+     */
+    @Select("select id as dataId, con_type as type, data_name as dataName, data_tag as dataTag, data_note as note, " +
+            "bc.create_by as createBy, bc.create_date as createDate," +
+            "used_number as usedNumber, db_config as dbConfig ,BD_group as connectorGroup, " +
+            "create_id as createId, demo from bi_data_connectors bc where is_open = '1' ORDER BY dataId DESC")
+    @ResultMap("DataConnectorListResultMap")
+    List<DataConnectorList> getDataConnectorListWithoutLimit(@Param("id") int id, TestPage testPage);
+
     /*
     转交数据源
      */

+ 19 - 4
bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserMapper.java

@@ -18,6 +18,20 @@ public interface UserMapper {
     @Select("SELECT COUNT(*) FROM bi_users")
     int getCount();
 
+    /**
+     * 获取主账套
+     * @return
+     */
+    @Select("SELECT id FROM BI_DATABASES where ismaster = 1 and rownum<2")
+    String getMasterId();
+
+    /**
+     * 获取目标账套数据链接ID
+     * @return
+     */
+    @Select("SELECT id FROM BI_DATABASES where USER_NAME = #{name} and rownum<2")
+    String getMasterIdByName(@Param("name") String name);
+
     /**
      * 查询UAS的人员资料表数据
      * @return
@@ -31,13 +45,14 @@ public interface UserMapper {
      * @param userList
      */
     @Insert("<script>"
-            + "INSERT INTO BI_USERS(BU_ID, BU_NAME, BU_POST, USER_NAME, PASS_WORD, BU_DEPARTMENT, CREATE_DATE) "
+            + "INSERT INTO BI_USERS(BU_ID, BU_NAME, BU_POST,BU_ROLE, USER_NAME, PASS_WORD, BU_DEPARTMENT, CREATE_DATE) "
             + "SELECT M.* FROM ("
             +   "<foreach collection=\"list\" item=\"item\" index=\"index\" separator=\"UNION ALL\">"
             +       "SELECT "
             +           "#{item.id, jdbcType=INTEGER},"
             +           "#{item.name, jdbcType=VARCHAR},"
             +           "#{item.post, jdbcType=VARCHAR},"
+            +           "#{item.role, jdbcType=VARCHAR},"
             +           "#{item.userName, jdbcType=VARCHAR},"
             +           "#{item.passWord, jdbcType=VARCHAR},"
             +           "#{item.department, jdbcType=VARCHAR},"
@@ -97,7 +112,7 @@ public interface UserMapper {
      */
     @Select("SELECT BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role," +
             " USER_NAME as userName, PASS_WORD as passWord, BU_PHONE as phone, BU_CLASS as state " +
-            "FROM BI_USERS WHERE USER_NAME = #{userName} OR BU_PHONE = #{userName}")
+            "FROM BI_USERS WHERE (USER_NAME = #{userName} OR BU_PHONE = #{userName}) and rownum = 1")
     User getLogin(String userName);
 
     /*
@@ -117,7 +132,7 @@ public interface UserMapper {
      */
     @Select("select BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role," +
             "user_name as userName, pass_word as passWord, create_date as createDate " +
-            "from bi_users WHERE BU_CLASS <> '离职'")
+            "from bi_users WHERE BU_CLASS <> '离职' AND BU_ROLE <> 'superAdmin'")
     List<User> getUserList();
 
     @Select("select BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role," +
@@ -129,7 +144,7 @@ public interface UserMapper {
     匹配用户20个
      */
     @Select("select BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role " +
-            "from bi_users where bu_name ${condition} AND BU_CLASS <> '离职' and rownum < #{count, jdbcType=INTEGER}")
+            "from bi_users where bu_name ${condition} AND BU_CLASS <> '离职' AND BU_ROLE <> 'superAdmin' and rownum < #{count, jdbcType=INTEGER}")
     List<User> getNameList(@Param("condition") String condition, @Param("count") Long count);
 
     /*

+ 31 - 2
bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserPowerMapper.java

@@ -1,9 +1,12 @@
 package com.usoftchina.bi.server.dao.user;
 
 import com.usoftchina.bi.server.model.vo.configVo.UserPowerInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DashboardPowerDTO;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * @Author chenwei
  * @Date 2019-05-13
@@ -42,7 +45,7 @@ public interface UserPowerMapper {
     void delete(UserPowerInfo userPowerInfo);
 
     @Select(  "<script>"
-            + "SELECT ID,BD_NAME,CASE NVL(BPU_ID, '1') WHEN 1 THEN 'false' ELSE 'true' END CHECKED "
+            + "SELECT ID id,BD_NAME dashboardName,CASE NVL(BPU_ID, '1') WHEN 1 THEN 0 ELSE 1 END checked "
             + "FROM BI_DASHBOARDS LEFT JOIN BI_POWER_USERS ON BPU_DASHBOARDID = ID WHERE CREATE_ID = #{userId, jdbcType=INTEGER} "
             + "<choose>"
             +   "<if test=\"type == 0\">"
@@ -53,6 +56,32 @@ public interface UserPowerMapper {
             +   "</otherwise>"
             + "</choose>"
             + "</script>")
-    void selectDashBoards(@Param("type") int type, @Param("id") int id, @Param("userId") int userId);
+    List<DashboardPowerDTO> selectDashBoards(@Param("type") int type, @Param("id") int id, @Param("userId") int userId);
+
+    @Delete("DELETE FROM BI_POWER_USERS WHERE BPU_USERGROUPID = #{id} AND BPU_DASHBOARDID IN (${ids})")
+    void deleteByUserGroupId(@Param("ids") String ids, @Param("id") int id);
+
+    @Delete("DELETE FROM BI_POWER_USERS WHERE BPU_USERID = #{id} AND BPU_DASHBOARDID IN (${ids})")
+    void deleteByUserId(@Param("ids") String ids, @Param("id") int id);
+
+    @Insert("<script>"
+            + "INSERT INTO BI_POWER_USERS(BPU_ID, BPU_DASHBOARDID, BPU_USERGROUPID) "
+            + "SELECT BI_POWER_USERS_SEQ.NEXTVAL, M.* FROM ("
+            + "<foreach collection=\"array\" item=\"id\" open=\"\" close=\"\" separator=\"UNION ALL\">"
+            +   "SELECT #{id},#{userGroupId} FROM DUAL"
+            + "</foreach>"
+            + ")M "
+            + "</script>")
+    void insertByUserGroupId(@Param("array") String[] ids, @Param("userGroupId") int id);
+
+    @Insert("<script>"
+            + "INSERT INTO BI_POWER_USERS(BPU_ID, BPU_DASHBOARDID, BPU_USERID) "
+            + "SELECT BI_POWER_USERS_SEQ.NEXTVAL, M.* FROM ("
+            + "<foreach collection=\"array\" item=\"id\" open=\"\" close=\"\" separator=\"UNION ALL\">"
+            +   "SELECT #{id},#{userId} FROM DUAL"
+            + "</foreach>"
+            + ")M "
+            + "</script>")
+    void insertByUserId(@Param("array") String[] ids, @Param("userId") int id);
 
 }

+ 85 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/po/RefreshData.java

@@ -0,0 +1,85 @@
+package com.usoftchina.bi.server.model.po;
+
+public class RefreshData {
+    private String sob;
+    private String address;
+    private String port;
+    private String sid;
+    private String em_name;
+    private String em_code;
+    private String em_id;
+    private String sob_name;
+    private String res = "";
+
+    public String getSob_name() {
+        return sob_name;
+    }
+
+    public void setSob_name(String sob_name) {
+        this.sob_name = sob_name;
+    }
+
+    public String getSob() {
+        return sob;
+    }
+
+    public void setSob(String sob) {
+        this.sob = sob;
+    }
+
+    public String getRes() {
+        return res;
+    }
+
+    public void setRes(String res) {
+        this.res = res;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getSid() {
+        return sid;
+    }
+
+    public void setSid(String sid) {
+        this.sid = sid;
+    }
+
+    public String getEm_name() {
+        return em_name;
+    }
+
+    public void setEm_name(String em_name) {
+        this.em_name = em_name;
+    }
+
+    public String getEm_code() {
+        return em_code;
+    }
+
+    public void setEm_code(String em_code) {
+        this.em_code = em_code;
+    }
+
+    public String getEm_id() {
+        return em_id;
+    }
+
+    public void setEm_id(String em_id) {
+        this.em_id = em_id;
+    }
+}

+ 49 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/po/SyncData.java

@@ -0,0 +1,49 @@
+package com.usoftchina.bi.server.model.po;
+
+public class SyncData {
+    private String from;
+    private String fromName;
+    private String to;
+    private String toName;
+    private String emName;
+
+    public String getEmName() {
+        return emName;
+    }
+
+    public void setEmName(String emName) {
+        this.emName = emName;
+    }
+
+    public String getFromName() {
+        return fromName;
+    }
+
+    public void setFromName(String fromName) {
+        this.fromName = fromName;
+    }
+
+    public String getToName() {
+        return toName;
+    }
+
+    public void setToName(String toName) {
+        this.toName = toName;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getTo() {
+        return to;
+    }
+
+    public void setTo(String to) {
+        this.to = to;
+    }
+}

+ 59 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/configVo/BatchUserPowerInfo.java

@@ -0,0 +1,59 @@
+package com.usoftchina.bi.server.model.vo.configVo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Author chenwei
+ * @Date 2019-05-17
+ */
+public class BatchUserPowerInfo implements Serializable {
+
+    /**
+     * 数据库权限记录id,插入语句使用
+     */
+    @ApiModelProperty(value = "数据库权限记录id,前端不用传")
+    private int id;
+
+    @ApiModelProperty(value = "多个用户ID或用户组ID,中间用逗号隔开")
+    private int bizId;
+
+    @ApiModelProperty(value = "标识用户/用户组;0:用户组,1:用户")
+    private int type;
+
+    @ApiModelProperty(value = "报表ID")
+    private String dashboardIds;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getBizId() {
+        return bizId;
+    }
+
+    public void setBizId(int bizId) {
+        this.bizId = bizId;
+    }
+
+    public String getDashboardIds() {
+        return dashboardIds;
+    }
+
+    public void setDashboardIds(String dashboardIds) {
+        this.dashboardIds = dashboardIds;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+}

+ 29 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DashboardCopyInfo.java

@@ -16,6 +16,27 @@ public class DashboardCopyInfo implements Serializable {
      */
     private int dataSourceId;
 
+    private String lastName = "_副本";
+
+    private String newCode = "";
+
+    public DashboardCopyInfo() {}
+
+    public DashboardCopyInfo(int dashboardId, int dataSourceId ,String lastName ,String newCode) {
+        this.dashboardId = dashboardId;
+        this.dataSourceId = dataSourceId;
+        this.lastName = lastName;
+        this.newCode = newCode;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
     public int getDashboardId() {
         return dashboardId;
     }
@@ -31,4 +52,12 @@ public class DashboardCopyInfo implements Serializable {
     public void setDataSourceId(int dataSourceId) {
         this.dataSourceId = dataSourceId;
     }
+
+    public String getNewCode() {
+        return newCode;
+    }
+
+    public void setNewCode(String newCode) {
+        this.newCode = newCode;
+    }
 }

+ 38 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DashboardPowerDTO.java

@@ -0,0 +1,38 @@
+package com.usoftchina.bi.server.model.vo.dataVo;
+
+import java.io.Serializable;
+
+/**
+ * @Author chenwei
+ * @Date 2019-05-16
+ */
+public class DashboardPowerDTO implements Serializable {
+
+    private int id;
+    private String dashboardName;
+    private boolean checked;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getDashboardName() {
+        return dashboardName;
+    }
+
+    public void setDashboardName(String dashboardName) {
+        this.dashboardName = dashboardName;
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+}

+ 12 - 1
bi-server/src/main/java/com/usoftchina/bi/server/model/vo/dataVo/DataSourceCopyInfo.java

@@ -16,6 +16,16 @@ public class DataSourceCopyInfo implements Serializable {
      */
     private int dataConnectionId;
 
+    private String lastName = "_副本";
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
     public int getDataSourceId() {
         return dataSourceId;
     }
@@ -35,8 +45,9 @@ public class DataSourceCopyInfo implements Serializable {
     public DataSourceCopyInfo() {
     }
 
-    public DataSourceCopyInfo(int dataSourceId, int dataConnectionId) {
+    public DataSourceCopyInfo(int dataSourceId, int dataConnectionId ,String lastName) {
         this.dataSourceId = dataSourceId;
         this.dataConnectionId = dataConnectionId;
+        this.lastName = lastName;
     }
 }

+ 7 - 12
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ChartsConfigService.java

@@ -1,9 +1,6 @@
 package com.usoftchina.bi.server.service.chart;
 
-import com.usoftchina.bi.core.base.BaseContextHolder;
-import com.usoftchina.bi.core.base.RepCode;
-import com.usoftchina.bi.core.base.RepEntity;
-import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.core.base.*;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
@@ -47,9 +44,8 @@ public class ChartsConfigService {
     保存表设置
      */
     public RepEntity setChartsConfig(ChartConfigInfo chartConfigInfo, String token){
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resMap.get("id"));
-        String userName = resMap.get("name");
+        int userId = BaseContextHolder.getUserId();
+        String userName = BaseContextHolder.getUserName();
         ChartConfig chartConfig = new ChartConfig();
         BeanUtils.copyProperties(chartConfigInfo, chartConfig);
 
@@ -104,11 +100,10 @@ public class ChartsConfigService {
     更新表设置
      */
     public RepEntity updateChartsConfig(ChartConfigInfo chartConfigInfo, String token){
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resMap.get("id"));
-        String userName = resMap.get("name");
+        int userId = BaseContextHolder.getUserId();
+        String userName = BaseContextHolder.getUserName();
         int createID = chartsConfigMapper.getCreateId(chartConfigInfo.getChartId());
-        if (userId != createID){
+        if (userId != createID && !RoleConstant.ADMIN.getRole().equals(BaseContextHolder.getRole())){
             return new RepEntity(RepCode.NoAuthority);
         }
         ChartConfig chartConfig = new ChartConfig();
@@ -165,7 +160,7 @@ public class ChartsConfigService {
         int userId = BaseContextHolder.getUserId();
         String username = BaseContextHolder.getUserName();
         int createId = chartsConfigMapper.getCreateId(changeOrderInfo.getId());
-        if (createId != userId){
+        if (createId != userId && !RoleConstant.SUPER_ADMIN.getRole().equals(BaseContextHolder.getRole())){
             return new RepEntity(RepCode.NoAuthority);
         }
         chartsConfigMapper.changeChartOrder(username, changeOrderInfo.getUserId(), changeOrderInfo.getId());

+ 108 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/common/UASService.java

@@ -0,0 +1,108 @@
+package com.usoftchina.bi.server.service.common;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.bi.core.base.BaseContextHolder;
+import com.usoftchina.bi.core.base.RepCode;
+import com.usoftchina.bi.core.base.RepEntity;
+import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.core.jdbc.DynamicDataSourceContextHolder;
+import com.usoftchina.bi.server.aspect.JwtTokenAspect;
+import com.usoftchina.bi.server.dao.common.MessageLogMapper;
+import com.usoftchina.bi.server.dao.common.UASMapper;
+import com.usoftchina.bi.server.dao.user.UserMapper;
+import com.usoftchina.bi.server.model.po.*;
+import com.usoftchina.bi.server.model.vo.configVo.DatabasesInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DashboardCopyInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DataSourceCopyInfo;
+import com.usoftchina.bi.server.service.dashboard.DashboardsService;
+import com.usoftchina.bi.server.service.dataSource.DataBasesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.usoftchina.bi.server.model.vo.dataVo.DashboardCopyInfo;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author hy
+ * @Date 2019-04-26
+ */
+@Service
+public class UASService {
+
+    @Autowired
+    private UASMapper uasMapper;
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Autowired
+    JwtTokenAspect jwtTokenUtil;
+
+    @Autowired
+    DashboardsService dashboardsService;
+
+    @Autowired
+    DataBasesService dataBasesService;
+
+    public String refreshData(RefreshData refreshData){
+        uasMapper.sp_refreshdata(refreshData);
+        String BI_DATABASES_ID = refreshData.getRes();
+        //添加数据源可切换
+        DatabasesInfo databasesInfo = uasMapper.getDatabasesInfo(BI_DATABASES_ID);
+        dataBasesService.addDataSource(databasesInfo);
+        //把人员信息重新插入一遍
+        //切换到主账套
+        DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(BI_DATABASES_ID));
+        List<User> userList = userMapper.getUASEmployee();
+        DynamicDataSourceContextHolder.setDataSourceType("[]");
+        userMapper.batchInsert(userList);
+        return "true";
+    }
+
+    public String sync(SyncData syncData){
+        //校验from 和 to  是否存在
+        String id = userMapper.getMasterId();
+        if(!StringUtils.hasText(id)){
+            return "主账套还未初始化,请初始化后再使用同步功能";
+        }
+        int hasFrom = uasMapper.checkDataBase(syncData.getFrom());
+        int hasTo = uasMapper.checkDataBase(syncData.getTo());
+        if(hasFrom==0){
+            //插入数据源
+            return "来源账套还未初始化,请初始化后再使用同步功能";
+        }
+        if(hasTo==0){
+            //插入数据源
+            uasMapper.insertDataBase(syncData.getToName(),syncData.getTo(),id);
+        }
+        //目标账套数据源ID
+        String to_basedata_id = userMapper.getMasterIdByName(syncData.getTo());
+        //添加数据源可切换
+        DatabasesInfo databasesInfo = uasMapper.getDatabasesInfo(to_basedata_id);
+        dataBasesService.addDataSource(databasesInfo);
+        //删除目标数据源所有标准报表
+        uasMapper.sp_clean_sob(syncData.getTo(),"");
+        //模拟登录
+        User user = userMapper.getLogin(syncData.getEmName());
+        String token = jwtTokenUtil.createToke(user).getToken();
+        //查找所有符合条件的Dashboard
+        List<DashboardCopyInfo> list = uasMapper.getFromSobDashboard(syncData.getFrom());
+        for (  DashboardCopyInfo dashboardCopyInfo : list) {
+            dashboardCopyInfo.setLastName("_" + syncData.getToName());
+            dashboardCopyInfo.setDataSourceId(Integer.valueOf(to_basedata_id));
+            //复制报表
+            dashboardsService.copy(token,dashboardCopyInfo);
+        }
+        //更新标准的旧报表编号账套后缀
+        uasMapper.sp_sync(syncData.getTo(),"");
+        return "true";
+    }
+}

+ 20 - 7
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashBoardMenuService.java

@@ -1,7 +1,9 @@
 package com.usoftchina.bi.server.service.dashboard;
 
+import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.core.base.RepCode;
 import com.usoftchina.bi.core.base.RepEntity;
+import com.usoftchina.bi.core.base.RoleConstant;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.dashboard.DashBoardMenuMapper;
@@ -13,6 +15,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -26,16 +29,21 @@ public class DashBoardMenuService {
     private DashBoardMenuMapper dashBoardMenuMapper;
 
     public List<DashboardMenuRespDTO> list(String token){
-        int userId = Integer.parseInt(GetTokenDataUtil.getTokenData(token).get("id"));
-        return getData(userId, 0);
+        String role = BaseContextHolder.getRole();
+        return getData(BaseContextHolder.getUserId(), 0, role);
     }
 
-    private List<DashboardMenuRespDTO> getData(int userId, int id){
-        List<DashboardMenuRespDTO> dashboardMenuRespDTOList = dashBoardMenuMapper.getMenuById(userId, id);
+    private List<DashboardMenuRespDTO> getData(int userId, int id, String role){
+        List<DashboardMenuRespDTO> dashboardMenuRespDTOList = new ArrayList<>();
+        if (!RoleConstant.SUPER_ADMIN.getRole().equals(role)) {
+            dashboardMenuRespDTOList = dashBoardMenuMapper.getMenuById(userId, id);
+        }else {
+            dashboardMenuRespDTOList = dashBoardMenuMapper.getMenuWithNoLimit(id);
+        }
         if (!CollectionUtils.isEmpty(dashboardMenuRespDTOList)) {
             for (DashboardMenuRespDTO dashboardMenuRespDTO : dashboardMenuRespDTOList) {
                 if ("menu".equals(dashboardMenuRespDTO.getType())) {
-                    dashboardMenuRespDTO.setChildren(getData(userId, dashboardMenuRespDTO.getId()));
+                    dashboardMenuRespDTO.setChildren(getData(userId, dashboardMenuRespDTO.getId(), role));
                 }
             }
         }
@@ -65,8 +73,13 @@ public class DashBoardMenuService {
     }
 
     public RepEntity getDashBoardByMenuId(String token, int menuId){
-        int userId = Integer.parseInt(GetTokenDataUtil.getTokenData(token).get("id"));
-        return new RepEntity(RepCode.success, dashBoardMenuMapper.getDashBoardByMenuId(userId, menuId));
+        int userId = BaseContextHolder.getUserId();
+        String role = BaseContextHolder.getRole();
+        if (!RoleConstant.SUPER_ADMIN.getRole().equals(role)) {
+            return new RepEntity(RepCode.success, dashBoardMenuMapper.getDashBoardByMenuId(userId, menuId));
+        }else {
+            return new RepEntity(RepCode.success, dashBoardMenuMapper.getDashBoardByMenuIdWithoutLimit(menuId));
+        }
     }
 
 }

+ 24 - 19
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsService.java

@@ -58,7 +58,7 @@ public class DashboardsService {
     private static final Logger LOGGER = LoggerFactory.getLogger(DashboardsService.class);
 
     /*
-    保存看板
+    保存报表
      */
     public RepEntity setDashboards(String token, DashboardsInfo dashboardsInfo) {
         //校验报表编号是否已存在
@@ -85,7 +85,7 @@ public class DashboardsService {
     }
 
     /*
-    更新看板
+    更新报表
      */
     public RepEntity updateDashboards(String token, DashboardsInfo dashboardsInfo) {
         //校验报表编号是否已存在
@@ -161,7 +161,7 @@ public class DashboardsService {
     }
 
     /*
-    删除看板
+    删除报表
      */
     public RepEntity delDashboards(String token, Integer id) {
         int userId = BaseContextHolder.getUserId();
@@ -175,14 +175,14 @@ public class DashboardsService {
             name = dashboards.getBdName();
         }
         dashboardsMapper.delDashboards(id);
-        //删除看板-图表关联关系
+        //删除报表-图表关联关系
         dashboardsMapper.deleteDashboardChartRelation(id);
-        messageLogService.delete("看板", name, BaseContextHolder.getUserName(), null);
+        messageLogService.delete("报表", name, BaseContextHolder.getUserName(), null);
         return new RepEntity(RepCode.success);
     }
 
     /*
-    查看看板
+    查看报表
      */
     public RepEntity getListDashboards(String token, TestPage testPage) {
         int id = BaseContextHolder.getUserId();
@@ -192,7 +192,7 @@ public class DashboardsService {
     }
 
     /*
-    查看单个看板
+    查看单个报表
      */
     public RepEntity getDashboards(String token, int id) {
         int userId = BaseContextHolder.getUserId();
@@ -204,7 +204,7 @@ public class DashboardsService {
     }
 
     /**
-     * 通过code查看单个看板
+     * 通过code查看单个报表
      * @param code
      * @return
      */
@@ -262,7 +262,7 @@ public class DashboardsService {
     }
 
     /**
-     * 通过分享链接获取看板信息
+     * 通过分享链接获取报表信息
      * @param data
      * @return
      */
@@ -282,7 +282,7 @@ public class DashboardsService {
     }
 
     /*
-    转交看板
+    转交报表
      */
     public RepEntity changeDashOrder(String token, ChangeOrderInfo changeOrderInfo) {
         int userId = BaseContextHolder.getUserId();
@@ -296,7 +296,7 @@ public class DashboardsService {
     }
 
     /*
-    查看看板分发对象
+    查看报表分发对象
      */
     public RepEntity getDashOrder(String token, int dashId) {
         int userId = BaseContextHolder.getUserId();
@@ -324,14 +324,14 @@ public class DashboardsService {
     }
 
     /**
-     * 复制看板
+     * 复制报表
      * @param dashboardCopyInfo
      * @return
      */
-    @Transactional
     public RepEntity copy(String token, DashboardCopyInfo dashboardCopyInfo) {
-        int userId = BaseContextHolder.getUserId();
-        String userName = BaseContextHolder.getUserName();
+        Map<String,String> userData = GetTokenDataUtil.getTokenData(token);
+        int userId = Integer.valueOf(userData.get("id"));
+        String userName = userData.get("name");
         int dashboardId = dashboardCopyInfo.getDashboardId(),
             dataSourceId = dashboardCopyInfo.getDataSourceId();
         List<String> idList = new ArrayList<>();
@@ -343,10 +343,10 @@ public class DashboardsService {
             for (int i = 0, len = idArray.length; i < len; i++) {
                 ChartConfig chartConfig = chartsConfigMapper.getOneChart(Integer.valueOf(idArray[i]));
                 int oldChartId = chartConfig.getChartId();
-                chartConfig.setChartName(chartConfig.getChartName() + "_副本");
+                chartConfig.setChartName(chartConfig.getChartName() + dashboardCopyInfo.getLastName());
                 chartConfig.setCreateBy(userName);
                 chartConfig.setCreateId(userId);
-                int dataId = dataConnectorService.copyDataSource(token, new DataSourceCopyInfo(chartConfig.getDataId(), dataSourceId)).getData();
+                int dataId = dataConnectorService.copyDataSource(token, new DataSourceCopyInfo(chartConfig.getDataId(), dataSourceId ,dashboardCopyInfo.getLastName())).getData();
                 chartConfig.setDataId(dataId);
                 chartsConfigMapper.insertCharts(chartConfig);
                 int newChartId = chartConfig.getChartId();
@@ -357,7 +357,7 @@ public class DashboardsService {
         //复制报表
         int dashboardCreatorId = dashboardsMapper.getCreateIdById(dashboardId);
         Dashboards dashboards = dashboardsMapper.getDashboards(dashboardCreatorId, dashboardId);
-        dashboards.setBdName(dashboards.getBdName() + "_副本");
+        dashboards.setBdName(dashboards.getBdName() + dashboardCopyInfo.getLastName());
         JSONArray jsonArray = JSON.parseArray(dashboards.getBdConfiguration());
         for (int i = 0, len = jsonArray.size(); i < len; i++) {
             JSONObject json = jsonArray.getJSONObject(i);
@@ -371,7 +371,12 @@ public class DashboardsService {
         dashboards.setCreateBy(userName);
         dashboards.setCreateId(userId);
         dashboards.setDemo(false);
-        dashboards.setBdCode(generateUUCode(0));
+        if(StringUtils.hasText(dashboardCopyInfo.getNewCode()) && dashboardCopyInfo.getNewCode().length()>0){
+            dashboards.setBdCode(dashboardCopyInfo.getNewCode());
+        }else{
+            dashboards.setBdCode(generateUUCode(0));
+        }
+
         dashboardsMapper.setDashboards(dashboards);
         String[] ids = String.join(",", idList).split(",");
         dashboardsMapper.saveDashboardChartRelation(dashboards.getId(), ids);

+ 7 - 7
bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataBasesService.java

@@ -48,7 +48,7 @@ public class DataBasesService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DataBasesService.class);
     /*
-   保存数据库
+   保存数据库
     */
     public RepEntity inputDatabases(DatabasesInfo databasesInfo){
         if (databasesInfo == null || "".equals(databasesInfo)){
@@ -56,9 +56,9 @@ public class DataBasesService {
         }
         Databases databases = new Databases();
         BeanUtils.copyProperties(databasesInfo, databases);
-        //校验此数据接是否已存在
+        //校验此数据接是否已存在
         validExists(databases);
-        //校验此接是否可用
+        //校验此接是否可用
         implementSqlService.connectTest(databases);
 
         String note = databases.getNote();
@@ -76,7 +76,7 @@ public class DataBasesService {
     }
 
     /**
-     * 校验此数据接是否已存在
+     * 校验此数据接是否已存在
      * @param databases
      */
     private void validExists(Databases databases){
@@ -117,7 +117,7 @@ public class DataBasesService {
         }
         String databaseName = dataConnectorMapper.getDatabases(id.intValue()).getName();
         dataConnectorMapper.deleteDatabases(id);
-        messageLogService.delete("数据接", databaseName, username, null);
+        messageLogService.delete("数据接", databaseName, username, null);
         return new RepEntity(RepCode.success);
     }
 
@@ -130,7 +130,7 @@ public class DataBasesService {
         if (databases.getPassWord() == null || "".equals(databases.getPassWord())){
             databases.setPassWord(null);
         }
-        //校验此接是否可用
+        //校验此接是否可用
         implementSqlService.connectTest(databases);
         //更新
         dataConnectorMapper.updatabases(databases);
@@ -220,7 +220,7 @@ public class DataBasesService {
     }
 
     //添加数据源
-    private void addDataSource(DatabasesInfo databasesInfo) {
+    public void addDataSource(DatabasesInfo databasesInfo) {
         //额外的数据源
         Map<String, Object> dsMap = new HashMap<>();
         dsMap.put("driver", "oracle.jdbc.driver.OracleDriver");

+ 22 - 16
bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataConnectorService.java

@@ -1,6 +1,6 @@
 package com.usoftchina.bi.server.service.dataSource;
 
-import com.usoftchina.bi.core.base.BaseContextHolder;
+import com.usoftchina.bi.core.base.*;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
@@ -15,9 +15,6 @@ import com.usoftchina.bi.server.model.bo.GroupUpdateId;
 import com.usoftchina.bi.server.model.po.BaseConfig;
 import com.usoftchina.bi.server.model.po.DataConnector;
 import com.usoftchina.bi.server.model.po.DataConnectorList;
-import com.usoftchina.bi.core.base.RepCode;
-import com.usoftchina.bi.core.base.RepEntity;
-import com.usoftchina.bi.core.base.TestPage;
 import com.usoftchina.bi.server.model.po.MessageLog;
 import com.usoftchina.bi.server.model.vo.configVo.*;
 import com.usoftchina.bi.server.model.vo.dataVo.ColumnValuesInfo;
@@ -36,6 +33,7 @@ import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
@@ -128,9 +126,14 @@ public class DataConnectorService {
      */
 //    @Cacheable(value = "dataConnector", key = "#testPage.pageNum")
     public RepEntity getListConnector(String token, TestPage testPage) {
-        Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
-        String id = resultMap.get("id");
-        List<DataConnectorList> listConnector = dataConnectorMapper.getDataConnectorList(Integer.parseInt(id), testPage.enablePaging());
+        int id = BaseContextHolder.getUserId();
+        String role = BaseContextHolder.getRole();
+        List<DataConnectorList> listConnector = new ArrayList<>();
+        if (RoleConstant.SUPER_ADMIN.getRole().equals(role)) {
+            listConnector = dataConnectorMapper.getDataConnectorListWithoutLimit(id, testPage.enablePaging());
+        }else {
+            listConnector = dataConnectorMapper.getDataConnectorList(id, testPage.enablePaging());
+        }
         List<DataConnectorList> listConnectors = new ArrayList<>();
         Iterator isList = listConnector.iterator();
         while (isList.hasNext()) {
@@ -207,9 +210,10 @@ public class DataConnectorService {
      */
     public RepEntity changeOrder(ChangeOrderInfo changeOrderInfo) {
         int userId = BaseContextHolder.getUserId();
+        String role = BaseContextHolder.getRole();
         String name = BaseContextHolder.getUserName();
         int createId = dataConnectorMapper.getCreateIdById(changeOrderInfo.getId());
-        if (createId != userId) {
+        if (createId != userId && !RoleConstant.SUPER_ADMIN.getRole().equals(role)) {
             return new RepEntity(RepCode.NoAuthority);
         }
         dataConnectorMapper.updataOrder(name, changeOrderInfo.getUserId(), changeOrderInfo.getId());
@@ -308,8 +312,7 @@ public class DataConnectorService {
      */
     public RepEntity updataDataConnectorGroup(String token, GroupInfo groupInfo) {
         dataConnectorMapper.updataConnectorGroup(groupInfo);
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        String username = resMap.get("name");
+        String username = BaseContextHolder.getUserName();
         messageLogService.update("数据源分组", groupInfo.getGroupName(), username, "更新分组");
         return new RepEntity(RepCode.success);
     }
@@ -365,14 +368,16 @@ public class DataConnectorService {
         int baseId = getChartsDataUtilService.getBaseIdByConnect(dataId);
         logger.info("切换数据库:{}", baseId);
 
-        Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
-        int id = Integer.parseInt(resultMap.get("id"));
+        int id = BaseContextHolder.getUserId();
         int createId = dataConnectorMapper.getCreateIdById(dataId);
         ColumnValuesInfo columnValuesInfo = new ColumnValuesInfo();
         ColumnConfigAndSql columnConfigAndSql = chartsConfigMapper.getConfigAndSql(dataId);
         String sql = columnConfigAndSql.getSql();
         String columnConfig = columnConfigAndSql.getColumnConfig();
         columnValuesInfo.setColumnConfig(columnConfig);
+        if (RoleConstant.SUPER_ADMIN.getRole().equals(BaseContextHolder.getRole())) {
+            id = createId;
+        }
         String sqls = chartsUtilService.columnNameUtil(id, dataId, sql, true, 0, createId);
 
         try {
@@ -412,8 +417,9 @@ public class DataConnectorService {
      * @return
      */
     public RepEntity<Integer> copyDataSource(String token, DataSourceCopyInfo dataSourceCopyInfo){
-        int userId = BaseContextHolder.getUserId();
-        String userName = BaseContextHolder.getUserName();
+        Map<String,String> userData = GetTokenDataUtil.getTokenData(token);
+        int userId = Integer.valueOf(userData.get("id"));
+        String userName = userData.get("name");
 
         int dataSourceId = dataSourceCopyInfo.getDataSourceId(),
             dataConnectionId = dataSourceCopyInfo.getDataConnectionId();
@@ -422,7 +428,7 @@ public class DataConnectorService {
         //校验SQL语句是否可正确在目标数据库执行
         enableCopy(loadObject, dataConnectionId);
         //复制数据源
-        dataConnector.setDataName(dataConnector.getDataName() + "_副本");
+        dataConnector.setDataName(dataConnector.getDataName() + dataSourceCopyInfo.getLastName());
         dataConnector.setCreateBy(userName);
         dataConnector.setCreateId(userId);
         dataConnector.setDbConId(String.valueOf(dataConnectionId));
@@ -437,7 +443,7 @@ public class DataConnectorService {
      * @param loadObject
      * @param dataConnectionId
      */
-    private void enableCopy(String loadObject, int dataConnectionId){
+    public void enableCopy(String loadObject, int dataConnectionId){
         DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(dataConnectionId));
         if (!loadObject.toUpperCase().startsWith("SELECT")) {
             loadObject = "SELECT * FROM " + loadObject;

+ 29 - 2
bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserPowerService.java

@@ -2,10 +2,14 @@ package com.usoftchina.bi.server.service.user;
 
 import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.server.dao.user.UserPowerMapper;
+import com.usoftchina.bi.server.model.vo.configVo.BatchUserPowerInfo;
 import com.usoftchina.bi.server.model.vo.configVo.UserPowerInfo;
+import com.usoftchina.bi.server.model.vo.dataVo.DashboardPowerDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Author chenwei
  * @Date 2019-05-13
@@ -29,8 +33,8 @@ public class UserPowerService {
      * @param type
      * @param id
      */
-    public void read(int type, int id){
-        userPowerMapper.selectDashBoards(type, id, BaseContextHolder.getUserId());
+    public List<DashboardPowerDTO> read(int type, int id){
+        return userPowerMapper.selectDashBoards(type, id, BaseContextHolder.getUserId());
     }
 
     /**
@@ -41,4 +45,27 @@ public class UserPowerService {
         userPowerMapper.delete(userPowerInfo);
     }
 
+    /**
+     * 批量更新权限
+     * @param batchUserPowerInfo
+     */
+    public void batchAdd(BatchUserPowerInfo batchUserPowerInfo) {
+        String[] ids = batchUserPowerInfo.getDashboardIds().split(",");
+        if (batchUserPowerInfo.getType() == 0) {
+            userPowerMapper.deleteByUserGroupId(batchUserPowerInfo.getDashboardIds(),batchUserPowerInfo.getBizId());
+            userPowerMapper.insertByUserGroupId(ids, batchUserPowerInfo.getBizId());
+        }else {
+            userPowerMapper.deleteByUserId(batchUserPowerInfo.getDashboardIds(), batchUserPowerInfo.getBizId());
+            userPowerMapper.insertByUserId(ids, batchUserPowerInfo.getBizId());
+        }
+    }
+
+    public void batchDelete(BatchUserPowerInfo batchUserPowerInfo){
+        if (batchUserPowerInfo.getType() == 0) {
+            userPowerMapper.deleteByUserGroupId(batchUserPowerInfo.getDashboardIds(),batchUserPowerInfo.getBizId());
+        }else {
+            userPowerMapper.deleteByUserId(batchUserPowerInfo.getDashboardIds(), batchUserPowerInfo.getBizId());
+        }
+    }
+
 }

+ 5 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserService.java

@@ -3,6 +3,7 @@ package com.usoftchina.bi.server.service.user;
 import com.usoftchina.bi.core.base.RepCode;
 import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.exception.MyException;
+import com.usoftchina.bi.core.jdbc.DynamicDataSourceContextHolder;
 import com.usoftchina.bi.core.utils.EncryUtil;
 import com.usoftchina.bi.server.aspect.JwtTokenAspect;
 import com.usoftchina.bi.server.dao.user.UserMapper;
@@ -87,8 +88,10 @@ public class UserService {
     private void copyUserFromUAS(){
         int count = userMapper.getCount();
         if (count == 0) {
+            DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(userMapper.getMasterId()));
             List<User> userList = userMapper.getUASEmployee();
             //userList.forEach(user -> user.setPassWord(EncryUtil.decryptPassword(user.getPassWord())));
+            DynamicDataSourceContextHolder.setDataSourceType(String.valueOf("[]"));
             userMapper.batchInsert(userList);
         }
     }
@@ -100,7 +103,9 @@ public class UserService {
      * @return
      */
     private User findUserFromUAS(String userName, String pws){
+        DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(userMapper.getMasterId()));
         User user = userMapper.getUserMess(userName);
+        DynamicDataSourceContextHolder.setDataSourceType(String.valueOf("[]"));
         if (null == user) {
             throw new MyException(RepCode.NoUser);
         }

+ 1 - 1
bi-server/src/main/resources/application-N_MALATA_ZZ.properties

@@ -5,7 +5,7 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
 #数据库连接地址
 #默认数据源
-spring.datasource.url=jdbc:oracle:thin:@117.25.180.218:1521:orcl
+spring.datasource.url=jdbc:oracle:thin:@192.168.230.200:1521:orcl
 spring.datasource.username=N_MALATA_ZZ_ZS
 spring.datasource.password=select!#%*(
 

+ 3 - 1
bi-server/src/main/resources/application-dev.properties

@@ -6,4 +6,6 @@ spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
 #Êý¾Ý¿âÁ¬½ÓµØÖ·
 spring.datasource.url=jdbc:oracle:thin:@10.1.81.2:1521:orcl
 spring.datasource.username=UAS_DEV
-spring.datasource.password=select!#%*(
+spring.datasource.password=select!#%*(
+server.port=8012
+server.servlet.context-path=/BI-DEV

+ 2 - 2
bi-server/src/main/resources/application-prod.properties → bi-server/src/main/resources/application-yitoa.properties

@@ -5,5 +5,5 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
 #Êý¾Ý¿âÁ¬½ÓµØÖ·
 spring.datasource.url=jdbc:oracle:thin:@218.18.115.198:1523:orcl
-spring.datasource.username=BI_ADMIN
-spring.datasource.password=admin
+spring.datasource.username=UAS_BI
+spring.datasource.password=select!#%*(

+ 2 - 2
bi-server/src/main/resources/application.properties

@@ -5,8 +5,8 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
 #数据库连接地址
 #默认数据源
-spring.datasource.url=jdbc:oracle:thin:@10.1.81.2:1521:orcl
-spring.datasource.username=UAS_DEV
+spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
+spring.datasource.username=UAS_BI
 spring.datasource.password=select!#%*(
 
 spring.jackson.date-format=yyyy-MM-dd