Browse Source

Merge remote-tracking branch 'origin/feature-refactor' into feature-refactor

hy 6 years ago
parent
commit
e4810b561d
41 changed files with 973 additions and 141 deletions
  1. 3 1
      bi-auth/src/main/java/com/usoftchina/bi/auth/config/ConfigAdapter.java
  2. 50 0
      bi-core/src/main/java/com/usoftchina/bi/core/base/BaseContextHolder.java
  3. 2 1
      bi-core/src/main/java/com/usoftchina/bi/core/base/RepCode.java
  4. 3 0
      bi-server/src/main/java/com/usoftchina/bi/server/aspect/JwtTokenAspect.java
  5. 91 0
      bi-server/src/main/java/com/usoftchina/bi/server/aspect/LogAspect.java
  6. 18 9
      bi-server/src/main/java/com/usoftchina/bi/server/controller/chart/ChartsConfigController.java
  7. 39 0
      bi-server/src/main/java/com/usoftchina/bi/server/controller/common/MessageLogController.java
  8. 5 0
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardMenuController.java
  9. 4 1
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardsController.java
  10. 5 4
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataBasesController.java
  11. 10 7
      bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataConnectorController.java
  12. 3 3
      bi-server/src/main/java/com/usoftchina/bi/server/controller/user/UserController.java
  13. 13 1
      bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ChartsConfigMapper.java
  14. 47 4
      bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ShowChartsMapper.java
  15. 34 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/common/MessageLogMapper.java
  16. 8 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/dashboard/DashBoardMenuMapper.java
  17. 29 0
      bi-server/src/main/java/com/usoftchina/bi/server/dao/dataSource/DataConnectorMapper.java
  18. 3 3
      bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserMapper.java
  19. 9 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/po/ColumnToShow.java
  20. 132 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/po/MessageLog.java
  21. 37 0
      bi-server/src/main/java/com/usoftchina/bi/server/model/pojo/annotation/Log.java
  22. 43 14
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ChartsConfigService.java
  23. 26 33
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowHistogramService.java
  24. 3 3
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowPieService.java
  25. 2 2
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowScatterService.java
  26. 91 0
      bi-server/src/main/java/com/usoftchina/bi/server/service/chart/TimeConverterUtil.java
  27. 56 0
      bi-server/src/main/java/com/usoftchina/bi/server/service/common/MessageLogService.java
  28. 6 0
      bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashBoardMenuService.java
  29. 41 17
      bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsService.java
  30. 2 1
      bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsToChartsUtilService.java
  31. 11 3
      bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataBasesService.java
  32. 48 16
      bi-server/src/main/java/com/usoftchina/bi/server/service/dataSource/DataConnectorService.java
  33. 1 1
      bi-server/src/main/java/com/usoftchina/bi/server/service/user/SynchronizeEmpInfo.java
  34. 1 10
      bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserService.java
  35. 92 5
      bi-server/src/main/java/com/usoftchina/bi/server/utils/ScreenUtil.java
  36. 3 0
      bi-server/src/main/resources/application.properties
  37. 0 0
      bi-server/src/main/webapp/dist/index.0e157b20.js
  38. 0 0
      bi-server/src/main/webapp/dist/index.3f25d010.css
  39. 0 0
      bi-server/src/main/webapp/dist/index.9af88545.js
  40. 0 0
      bi-server/src/main/webapp/dist/index.9e336fcf.css
  41. 2 2
      bi-server/src/main/webapp/dist/index.html

+ 3 - 1
bi-auth/src/main/java/com/usoftchina/bi/auth/config/ConfigAdapter.java

@@ -22,7 +22,9 @@ public class ConfigAdapter implements WebMvcConfigurer {
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(securityInterceptor())
                 .addPathPatterns("/DataBase/*").excludePathPatterns("/DataBase/getColumnData")
-        .addPathPatterns("/getUserList").addPathPatterns("/updateUser")
+        .addPathPatterns("/getUserList")
+        .addPathPatterns("/*User*")
+        .addPathPatterns("/*User*/*")
         .addPathPatterns("/Connector/*").excludePathPatterns("/Connector/getListDataConnector")
         .excludePathPatterns("/Connector/getConnectorGroup")
         .excludePathPatterns("/getDashboardByCode")

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

@@ -0,0 +1,50 @@
+package com.usoftchina.bi.core.base;
+
+import org.springframework.util.ObjectUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author chenwei
+ * @Date 2019-05-07
+ */
+public class BaseContextHolder {
+
+    private final static ThreadLocal<Map<String, Object>> contextHolder = new ThreadLocal<Map<String, Object>>();
+
+    public static void set(String key, Object value) {
+        Map<String, Object> map = contextHolder.get();
+        if (null == map) {
+            map = new HashMap<String, Object>(1);
+            contextHolder.set(map);
+        }
+        map.put(key, value);
+    }
+
+    public static Object get(String key) {
+        Map<String, Object> map = contextHolder.get();
+        if (null == map) {
+            return null;
+        }
+        return map.get(key);
+    }
+
+    public static int getUserId() {
+        Object value = get("userId");
+        return Integer.valueOf(String.valueOf(value));
+    }
+
+    public static void setUserId(int userId) {
+        set("userId", userId);
+    }
+
+    public static String getUserName() {
+        Object value = get("userName");
+        return String.valueOf(value);
+    }
+
+    public static void setUserName(String userName) {
+        set("userName", userName);
+    }
+}

+ 2 - 1
bi-core/src/main/java/com/usoftchina/bi/core/base/RepCode.java

@@ -24,7 +24,8 @@ public enum  RepCode {
     DashboardNonExistent(-510, "看板不存在"),
     DATACONNECTOR_USED_DATASOURCE(-511, "已有数据源使用了此连接,无法删除!"),
     CHARTS_USED_DATACONNECTOR(-512, "已有图表使用了此数据源,无法删除!"),
-    DASHBOARD_USED_CHARTS(-513, "已有看板使用了此图表,无法删除!");
+    DASHBOARD_USED_CHARTS(-513, "已有看板使用了此图表,无法删除!"),
+    MENU_USED_DASHBOARD(-514, "此目录下存在看板,无法删除!");
 
     private int code;
     private String msg;

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

@@ -5,6 +5,7 @@ import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.Claim;
 import com.auth0.jwt.interfaces.DecodedJWT;
+import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.server.model.po.TokenData;
 import com.usoftchina.bi.server.model.po.User;
@@ -91,6 +92,8 @@ public class JwtTokenAspect {
         } catch (MyException e) {
             throw new MyException(-505, "token过期");
         }
+        BaseContextHolder.setUserId(Integer.valueOf(jwt.getClaim("id").asString()));
+        BaseContextHolder.setUserName(jwt.getClaim("name").asString());
         return jwt.getClaims();
     }
 }

+ 91 - 0
bi-server/src/main/java/com/usoftchina/bi/server/aspect/LogAspect.java

@@ -0,0 +1,91 @@
+package com.usoftchina.bi.server.aspect;
+
+import com.usoftchina.bi.core.utils.GetTokenDataUtil;
+import com.usoftchina.bi.server.model.pojo.annotation.Log;
+import com.usoftchina.bi.server.service.common.MessageLogService;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * Log注解处理类,用于记录操作日志(保存/更新/删除)
+ * @Author chenwei
+ * @Date 2019-04-26
+ */
+@Aspect
+@Component
+public class LogAspect {
+
+    private ExpressionParser parser = new SpelExpressionParser();
+
+    private LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
+
+    @Autowired
+    private MessageLogService messageLogService;
+
+    @Pointcut("@annotation(com.usoftchina.bi.server.model.pojo.annotation.Log)")
+    public void Log(){
+
+    }
+
+    @After(value = "Log()")
+    public void writeLog(JoinPoint joinPoint){
+        Object[] arguments = joinPoint.getArgs();
+        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
+        Method method = signature.getMethod();
+        Log log = method.getAnnotation(Log.class);
+        String content = log.value(), token = log.token(), module = log.module(), name = log.name();
+        String contentValue = parseSpEL(method, arguments, content, String.class, content);
+        String nameValue = parseSpEL(method, arguments, name, String.class, null);
+        String tokenValue = parseSpEL(method, arguments, token, String.class, null);
+        String methodName = method.getName();
+        String username = GetTokenDataUtil.getTokenData(tokenValue).get("name");
+        if (methodName.startsWith("save")) {
+            // 记录新增日志
+            messageLogService.save(module, nameValue, username, contentValue);
+        }else if (methodName.startsWith("update")) {
+            // 记录更改日志
+            messageLogService.update(module, nameValue, username, contentValue);
+        }else if (methodName.startsWith("delete")) {
+            // 记录删除日志
+            messageLogService.delete(module, nameValue, username, contentValue);
+        }
+    }
+
+    /**
+     * 解析SpringEL表达式的值
+     * @param method
+     * @param arguments
+     * @param spel
+     * @param Clazz
+     * @param defaultResult
+     * @param <T>
+     * @return
+     */
+    private <T> T parseSpEL(Method method, Object[] arguments, String spel, Class<T> Clazz, T defaultResult){
+        String[] params = discoverer.getParameterNames(method);
+        EvaluationContext context = new StandardEvaluationContext();
+        for (int i = 0, len = params.length; i < len; i++) {
+            context.setVariable(params[i], arguments[i]);
+        }
+        try {
+            Expression expression = parser.parseExpression(spel);
+            return expression.getValue(context, Clazz);
+        }catch (Exception e) {
+            return defaultResult;
+        }
+    }
+
+}

+ 18 - 9
bi-server/src/main/java/com/usoftchina/bi/server/controller/chart/ChartsConfigController.java

@@ -1,9 +1,11 @@
 package com.usoftchina.bi.server.controller.chart;
 
+import com.usoftchina.bi.auth.annotation.Auth;
 import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.base.TestPage;
 import com.usoftchina.bi.server.model.bo.GroupUpdateId;
 import com.usoftchina.bi.server.model.pojo.annotation.CheckToken;
+import com.usoftchina.bi.server.model.pojo.annotation.Log;
 import com.usoftchina.bi.server.model.vo.configVo.ChangeOrderInfo;
 import com.usoftchina.bi.server.model.vo.configVo.ChartConfigInfo;
 import com.usoftchina.bi.server.model.vo.configVo.GroupInfo;
@@ -32,8 +34,9 @@ public class ChartsConfigController {
             @ApiImplicitParam(name = "body", value = "图表配置", required = true, dataType = "ChartConfigInfo", paramType = "body")
     })
     @CheckToken
+    @Log(module = "图表", name = "#body.chartName", token = "#token")
     @PostMapping("/inputCharts")
-    public RepEntity inputCharts(@RequestHeader String token, @RequestBody ChartConfigInfo body){
+    public RepEntity saveCharts(@RequestHeader String token, @RequestBody ChartConfigInfo body){
         return chartsConfigService.setChartsConfig(body, token);
     }
 
@@ -42,6 +45,7 @@ public class ChartsConfigController {
     */
     @ApiOperation(value = "更新图表", notes = "更新图表", response = RepEntity.class)
     @CheckToken
+    @Log(module = "图表", name = "#body.chartName", token = "#token")
     @PostMapping("/updateCharts")
     public RepEntity updateCharts(@RequestHeader String token,@RequestBody ChartConfigInfo body){
         return chartsConfigService.updateChartsConfig(body, token);
@@ -62,9 +66,10 @@ public class ChartsConfigController {
      */
     @ApiOperation(value = "更新图表分组", notes = "更新图表分组", response = RepEntity.class)
     @CheckToken
+    @Auth(user = "admin")
     @PostMapping("/updateChartConfigGroup")
     public RepEntity updateConfigGroup(@RequestHeader String token, @RequestBody GroupUpdateId body){
-        return chartsConfigService.updateConfigGroup(body);
+        return chartsConfigService.updateConfigGroup(token, body);
     }
 
     /*
@@ -73,8 +78,8 @@ public class ChartsConfigController {
     @ApiOperation(value = "删除图表", notes = "删除图表", response = RepEntity.class)
     @CheckToken
     @PostMapping("/delChartsConfig")
-    public RepEntity delChartsConfig(@RequestHeader String token,@RequestBody Long body){
-        return chartsConfigService.delChartsConfig(body);
+    public RepEntity deleteChartsConfig(@RequestHeader String token, @RequestBody Long body){
+        return chartsConfigService.delChartsConfig(token, body);
     }
 
     /*
@@ -102,9 +107,10 @@ public class ChartsConfigController {
      */
     @ApiOperation(value = "添加图表分组", notes = "添加图表分组", response = RepEntity.class)
     @CheckToken
+    @Auth(user = "admin")
     @PostMapping("/setChartsGroup")
     public RepEntity setChartsGroup(@RequestHeader String token, @RequestBody GroupInfo body){
-        return chartsConfigService.setDataConnectorGroup(body);
+        return chartsConfigService.setDataConnectorGroup(token, body);
     }
 
     /*
@@ -112,16 +118,18 @@ public class ChartsConfigController {
      */
     @ApiOperation(value = "更新图表分组", notes = "更新图表分组", response = RepEntity.class)
     @CheckToken
+    @Auth(user = "admin")
     @PostMapping("/updataChartsGroup")
     public RepEntity updataChartsGroup(@RequestHeader String token,@RequestBody GroupInfo body){
-        return chartsConfigService.updataDataConnectorGroup(body);
+        return chartsConfigService.updataDataConnectorGroup(token, body);
     }
 
     @ApiOperation(value = "批量更新数据源分组", notes = "批量更新数据源分组", response = RepEntity.class)
     @CheckToken
+    @Auth(user = "admin")
     @PostMapping("/batchUpdateChartsGroup")
     public RepEntity saveChartsGroup(@RequestHeader String token, @RequestBody List<GroupInfo> groupInfoList){
-        return chartsConfigService.saveChartsGroup(groupInfoList);
+        return chartsConfigService.saveChartsGroup(token, groupInfoList);
     }
 
     /*
@@ -131,7 +139,7 @@ public class ChartsConfigController {
     @CheckToken
     @PostMapping("/updataListGroup")
     public RepEntity updataListGroup(@RequestHeader String token,@RequestBody List<GroupInfo> body){
-        return chartsConfigService.updataListGroup(body);
+        return chartsConfigService.updataListGroup(token, body);
     }
 
     /*
@@ -139,9 +147,10 @@ public class ChartsConfigController {
      */
     @ApiOperation(value = "删除图表分组", notes = "删除图表分组", response = RepEntity.class)
     @CheckToken
+    @Auth(user = "admin")
     @PostMapping("/delChartsGroup")
     public RepEntity delChartsGroup(@RequestHeader String token,@RequestBody List<Integer> body){
-        return chartsConfigService.delDataConnectorGroup(body);
+        return chartsConfigService.delDataConnectorGroup(token, body);
     }
 
     /*

+ 39 - 0
bi-server/src/main/java/com/usoftchina/bi/server/controller/common/MessageLogController.java

@@ -0,0 +1,39 @@
+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.pojo.annotation.CheckToken;
+import com.usoftchina.bi.server.service.common.MessageLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author chenwei
+ * @Date 2019-04-26
+ */
+@RestController
+@RequestMapping("/messageLog")
+@Api(description = "操作日志接口")
+public class MessageLogController {
+
+    @Autowired
+    private MessageLogService messageLogService;
+
+    @GetMapping("/list")
+    @CheckToken
+    @ApiOperation(value = "操作日志列表", notes = "操作日志列表(分页)", response = RepEntity.class)
+    public RepEntity<PageInfo<MessageLog>> list(@RequestHeader String token, TestPage testPage){
+        return new RepEntity<>(RepCode.success, messageLogService.list(testPage));
+    }
+
+}

+ 5 - 0
bi-server/src/main/java/com/usoftchina/bi/server/controller/dashboard/DashboardMenuController.java

@@ -1,5 +1,6 @@
 package com.usoftchina.bi.server.controller.dashboard;
 
+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.server.model.pojo.annotation.CheckToken;
@@ -32,6 +33,7 @@ public class DashboardMenuController {
 
     @PostMapping("/save")
     @CheckToken
+    @Auth(user = "admin")
     @ApiOperation(value = "保存目录", notes = "保存看板目录", response = RepEntity.class)
     public RepEntity save(@RequestHeader String token, @RequestBody DashBoardMenuInfo dashBoardMenuInfo){
         dashBoardMenuService.save(dashBoardMenuInfo);
@@ -40,6 +42,7 @@ public class DashboardMenuController {
 
     @PostMapping("/update")
     @CheckToken
+    @Auth(user = "admin")
     @ApiOperation(value = "更新目录", notes = "更新看板目录", response = RepEntity.class)
     public RepEntity update(@RequestHeader String token, @RequestBody DashBoardMenuInfo dashBoardMenuInfo){
         dashBoardMenuService.update(dashBoardMenuInfo);
@@ -48,6 +51,7 @@ public class DashboardMenuController {
 
     @PostMapping("/delete/{id}")
     @CheckToken
+    @Auth(user = "admin")
     @ApiOperation(value = "删除目录", notes = "删除看板目录", response = RepEntity.class)
     public RepEntity delete(@RequestHeader String token, @PathVariable("id") Long id){
         dashBoardMenuService.deleteById(id);
@@ -56,6 +60,7 @@ public class DashboardMenuController {
 
     @PostMapping("/update/dashboard")
     @CheckToken
+    @Auth(user = "admin")
     @ApiOperation(value = "更新看板目录", notes = "更新看板目录", response = RepEntity.class)
     public RepEntity updateDashBoard(@RequestHeader String token, @RequestBody DashBoardUpdateMenuInfo dashBoardUpdateMenuInfo){
         dashBoardMenuService.updateDashBoardMenu(dashBoardUpdateMenuInfo);

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

@@ -6,6 +6,7 @@ import com.usoftchina.bi.core.base.TestPage;
 import com.usoftchina.bi.core.utils.EncryUtil;
 import com.usoftchina.bi.server.model.bo.ShareReqBO;
 import com.usoftchina.bi.server.model.pojo.annotation.CheckToken;
+import com.usoftchina.bi.server.model.pojo.annotation.Log;
 import com.usoftchina.bi.server.model.vo.configVo.ChangeOrderInfo;
 import com.usoftchina.bi.server.model.vo.configVo.ChartsToDashInfo;
 import com.usoftchina.bi.server.model.vo.configVo.DashboardsInfo;
@@ -33,8 +34,9 @@ public class DashboardsController {
      */
     @ApiOperation(value = "保存看板", notes = "保存看板", response = RepEntity.class)
     @CheckToken
+    @Log(module = "看板", name = "#body.bdName", token = "#token")
     @PostMapping("/inputDashboards")
-    public RepEntity inputDashboards(@RequestHeader String token, @RequestBody DashboardsInfo body){
+    public RepEntity saveDashboards(@RequestHeader String token, @RequestBody DashboardsInfo body){
         return dashboardsService.setDashboards(token, body);
     }
 
@@ -43,6 +45,7 @@ public class DashboardsController {
      */
     @ApiOperation(value = "更新看板", notes = "更新看板", response = RepEntity.class)
     @CheckToken
+    @Log(module = "看板", name = "#body.bdName", token = "#token")
     @PostMapping("/updateDashboards")
     public RepEntity updateDashboards(@RequestHeader String token,@RequestBody DashboardsInfo body){
         return dashboardsService.updateDashboards(token, body);

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

@@ -5,6 +5,7 @@ import com.usoftchina.bi.server.model.pojo.annotation.CheckToken;
 import com.usoftchina.bi.server.model.po.Databases;
 import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.model.pojo.annotation.Log;
 import com.usoftchina.bi.server.model.vo.configVo.DatabasesInfo;
 import com.usoftchina.bi.server.service.dataSource.DataBasesService;
 import com.usoftchina.bi.server.service.dataSource.ImplementSqlService;
@@ -13,8 +14,6 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 @RestController
 @RequestMapping("/DataBase")
 @Api(description = "数据连接相关接口")
@@ -30,8 +29,9 @@ public class DataBasesController {
     @ApiOperation(value = "保存数据库配置", notes = "保存数据库配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
+    @Log(module = "数据连接", name = "#body.name", token = "#token")
     @PostMapping("/inputDatabases")
-    public RepEntity inputDatabases(@RequestHeader String token, @RequestBody DatabasesInfo body){
+    public RepEntity saveDatabases(@RequestHeader String token, @RequestBody DatabasesInfo body){
         return dataBasesService.inputDatabases(body);
     }
 
@@ -63,8 +63,9 @@ public class DataBasesController {
     @ApiOperation(value = "更新数据库配置", notes = "更新数据库配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
+    @Log(module = "数据连接", name = "#databasesInfo.name", token = "#token")
     @PostMapping("/updatabases")
-    public RepEntity updatabases(@RequestHeader String token,@RequestBody DatabasesInfo databasesInfo){
+    public RepEntity updateDatabases(@RequestHeader String token,@RequestBody DatabasesInfo databasesInfo){
         return dataBasesService.updatabases(databasesInfo);
     }
 

+ 10 - 7
bi-server/src/main/java/com/usoftchina/bi/server/controller/dataSource/DataConnectorController.java

@@ -7,6 +7,7 @@ import com.usoftchina.bi.server.model.bo.GroupUpdateId;
 import com.usoftchina.bi.server.model.bo.ToSql;
 import com.usoftchina.bi.core.base.RepEntity;
 import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.model.pojo.annotation.Log;
 import com.usoftchina.bi.server.model.vo.configVo.ChangeOrderInfo;
 import com.usoftchina.bi.server.model.vo.configVo.DataConnectorInfo;
 import com.usoftchina.bi.server.model.vo.configVo.GroupInfo;
@@ -37,6 +38,7 @@ public class DataConnectorController {
     @ApiOperation(value = "保存数据源配置", notes = "保存数据源配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
+    @Log(module = "数据源", name = "#body.dataName", token = "#token")
     @PostMapping("/inputDataConnector")
     public RepEntity saveDataConnector(@RequestHeader String token, @RequestBody DataConnectorInfo body) {
         return dataConnectorService.setDataConnector(token,body);
@@ -69,6 +71,7 @@ public class DataConnectorController {
     @ApiOperation(value = "更新数据源配置", notes = "更新数据源配置", response = RepEntity.class)
     @CheckToken
     @Auth(user = "admin")
+    @Log(module = "数据源", name = "#body.dataName", token = "#token")
     @PostMapping("/updateData")
     public RepEntity updateData(@RequestHeader String token,@RequestBody DataConnectorInfo body){
         return dataConnectorService.updateData(body);
@@ -81,7 +84,7 @@ public class DataConnectorController {
     @CheckToken
     @PostMapping("/changeDbOrder")
     public RepEntity changeDbOrder(@RequestHeader String token,@RequestBody ChangeOrderInfo body){
-        return dataConnectorService.changeOrder(body, token);
+        return dataConnectorService.changeOrder(body);
     }
 
     /*
@@ -92,7 +95,7 @@ public class DataConnectorController {
     @CheckToken
     @PostMapping("/updateConnectConfigGroup")
     public RepEntity updateConConfigGroup(@RequestHeader String token,@RequestBody GroupUpdateId body){
-        return dataConnectorService.updateConfigGroup(body);
+        return dataConnectorService.updateConfigGroup(token, body);
     }
 
 
@@ -104,7 +107,7 @@ public class DataConnectorController {
     @CheckToken
     @PostMapping("/delDataConnector")
     public RepEntity delDataConnector(@RequestHeader String token,@RequestBody Long body){
-        return dataConnectorService.delDataConnector(body);
+        return dataConnectorService.delDataConnector(token, body);
     }
 
     /*
@@ -127,7 +130,7 @@ public class DataConnectorController {
     @PostMapping("/setConnectorGroup")
     @Auth(user = "admin")
     public RepEntity setConnectorGroup(@RequestHeader String token,@RequestBody GroupInfo body){
-        return dataConnectorService.setDataConnectorGroup(body);
+        return dataConnectorService.setDataConnectorGroup(token, body);
     }
 
     /**
@@ -141,7 +144,7 @@ public class DataConnectorController {
     @PostMapping("/batchUpdateConnectorGroup")
     @Auth(user = "admin")
     public RepEntity saveConnectorGroups(@RequestHeader String token, @RequestBody List<GroupInfo> groupInfoList){
-        return dataConnectorService.saveConnectorGroups(groupInfoList);
+        return dataConnectorService.saveConnectorGroups(token, groupInfoList);
     }
 
     /*
@@ -152,7 +155,7 @@ public class DataConnectorController {
     @Auth(user = "admin")
     @PostMapping("/updataDataConnectorGroup")
     public RepEntity updataDataConnectorGroup(@RequestHeader String token,@RequestBody GroupInfo body){
-        return dataConnectorService.updataDataConnectorGroup(body);
+        return dataConnectorService.updataDataConnectorGroup(token, body);
     }
 
     /*
@@ -174,7 +177,7 @@ public class DataConnectorController {
     @CheckToken
     @PostMapping("/delDataConnectorGroup")
     public RepEntity delDataConnectorGroup(@RequestHeader String token,@RequestBody Long body){
-        return dataConnectorService.delDataConnectorGroup(body);
+        return dataConnectorService.delDataConnectorGroup(token, body);
     }
 
     /*

+ 3 - 3
bi-server/src/main/java/com/usoftchina/bi/server/controller/user/UserController.java

@@ -95,9 +95,9 @@ public class UserController {
      */
     @ApiOperation(value = "删除用户组", notes = "删除用户组", response = RepEntity.class)
     @Auth(user = "admin")
-    @PostMapping("/delUserGroup")
-    public RepEntity delUserGroup(@RequestBody Long body){
-        return userService.delUserGroup(body);
+    @PostMapping("/delUserGroup/{id}")
+    public RepEntity delUserGroup(@PathVariable("id") Long id){
+        return userService.delUserGroup(id);
     }
 
     /*

+ 13 - 1
bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ChartsConfigMapper.java

@@ -31,7 +31,7 @@ public interface ChartsConfigMapper {
     @Delete("delete from bi_charts where id = #{id}")
     void deleteCharts(Long id);
 
-    @Select("select bc.id as chartId, chart_name as chartName, chart_type as chartType, bc.create_by as createBy, bc.create_date as createDate, bc_charts_group as chartsGroup " +
+    @Select("select bc.id as chartId, chart_name as chartName, BC_FETCHCONFIG as fetchConfig, chart_type as chartType, bc.create_by as createBy, bc.create_date as createDate, bc_charts_group as chartsGroup " +
             ",bc.bc_filters as filters, bc.BD_DATA_ID as dataId, bc_table_name as tableName, CHART_CONFIG as chartConfig, bc.GROUP_BY as groupBy, bc_charts_option as chartOption, " +
             "bc.ACCESS_AUTHORITY as accessAuthority, UPDATE_AUTHORITY as updateAuthority, CHART_DESCRIBES as describes, BC_CHART_STYLE as style, BC_FILTERS as filters " +
             ",bc.create_id as createId, bdc.DATA_NAME as dataName, bc.demo, BD.BASES_NAME as dataConnectionName, BD.ID as dataConnectionId  from bi_charts bc left join BI_DATA_CONNECTORS bdc on bc.BD_DATA_ID = bdc.id left join BI_DATABASES bd on BD.ID = BDC.DB_CONFIG " +
@@ -243,6 +243,18 @@ public interface ChartsConfigMapper {
             + "</script>")
     void batchDeleteCharts(@Param("list") List<GroupInfo> groupInfoList);
 
+    /**
+     * 更新图表分组为默认分组-1
+     * @param groupInfoList
+     */
+    @Update("<script>"
+            + "UPDATE BI_CHARTS_GROUP SET BC_CHARTS_GROUP = -1 WHERE BC_CHARTS_GROUP IN "
+            + "<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" close=\")\" separator=\",\">"
+            +   "#{item.id, jdbcType=INTEGER}"
+            + "</foreach>"
+            + "</script>")
+    void batchUpdateGroupToDefault(@Param("list") List<GroupInfo> groupInfoList);
+
     /*
     查询分组
      */

+ 47 - 4
bi-server/src/main/java/com/usoftchina/bi/server/dao/chart/ShowChartsMapper.java

@@ -29,10 +29,16 @@ public interface ShowChartsMapper {
 
     //x轴数据
     @Select("select ${dataType}(${yAxisName}) from ${tableName} where ${xColumn} = #{xdata} ${screen}")
-    String getValues(@Param("yAxisName") String yAxisName, @Param("xColumn") String xColumn,
+    String getXValue(@Param("yAxisName") String yAxisName, @Param("xColumn") String xColumn,
                      @Param("tableName") String tableName, @Param("dataType") String dataType,
                      @Param("xdata") String xdata, @Param("screen") String screen);
 
+    //x轴数据 -> 优化后
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} where 1=1 ${screen} GROUP BY ${xColumn}")
+    List<Double> getValues(@Param("yAxisName") String yAxisName, @Param("xColumn") String xColumn,
+                    @Param("tableName") String tableName, @Param("dataType") String dataType,
+                    @Param("screen") String screen);
+
     //x轴为空时的数据
     @Select("select ${dataType}(${yAxisName}) from ${tableName} where ${xColumn} is null ${screen}")
     String getValuesIsNull(@Param("yAxisName") String yAxisName, @Param("xColumn") String xColumn,
@@ -42,7 +48,7 @@ public interface ShowChartsMapper {
 
 
     //查询分组系列
-    @Select("select ${groupsBy} from ${tableName} where 1=1 ${screen} and rownum<=#{count} group by ${groupsBy}")
+    @Select("SELECT * FROM (select ${groupsBy} from ${tableName} where ${groupsBy} is not null ${screen} group by ${groupsBy}) WHERE rownum<=#{count}")
     List<String> getGroups(@Param("groupsBy") String groupsBy, @Param("tableName") String tableName, @Param("screen") String screen, @Param("count") int count);
 
     //查询分组系列个数
@@ -57,6 +63,10 @@ public interface ShowChartsMapper {
                           @Param("xColumn") String xColumn,
                           @Param("screen") String screen);
 
+    //查询分组的值(柱状图)->优化后
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} where ${groupsColumn} and ${xColumn} ${screen}")
+    List<Double> getGroupsValues(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
+                                 @Param("groupsColumn") String groupsColumn, @Param("xColumn") String xColumn, @Param("screen") String screen);
 
     //时间类型的X轴
     @Select("select distinct to_char(${xAxisName},${timeType})time from ${tableName} ${screen} ORDER by to_char(${xAxisName},${timeType}) ASC")
@@ -70,7 +80,7 @@ public interface ShowChartsMapper {
 
     //半年
     @Select("select distinct case when to_char(${xAxisName},'MM')<=6 then to_char(${xAxisName},'YYYY')|| '-H1'" +
-            "else to_char(${xAxisName},'YYYY')||'-H2' end time from ${tableName} ${screen} order by time")
+            "else to_char(${xAxisName},'YYYY')||'-H2' end time from ${tableName} ${screen} and ${xAxisName} is not null order by time")
     List<String> getTimeYear(@Param("xAxisName") String xAxisName, @Param("tableName") String tableName, @Param("screen") String screen);
     
     //无分组时间类型值
@@ -86,12 +96,33 @@ public interface ShowChartsMapper {
                                  @Param("tableName") String tableName, @Param("xAxisName") String xAxisName,
                                  @Param("screen") String screen);
 
+    //无分组时间类型值(柱状图)->优化后
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} WHERE 1=1 ${screen} GROUP BY (to_char(${xAxisName},${timeType})) ORDER BY (to_char(${xAxisName},${timeType}))")
+    List<Double> getHistogramTimeValue(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName,
+                                       @Param("tableName") String tableName, @Param("xAxisName") String xAxisName,
+                                       @Param("timeType") String timeType, @Param("screen") String screen);
+
     //无分组半年时间值
     @Select("select ${dataType}(${yAxisName}) from ${tableName} where TO_CHAR(${xAxisName},'YYYY-MM') between #{firstIndex} and #{afterIndex} ${screen}")
     String getTimeValueYear(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
                             @Param("xAxisName") String xAxisName, @Param("firstIndex") String firstIndex,
                             @Param("afterIndex") String afterIndex, @Param("screen") String screen);
 
+    /**
+     * 无分组半年时间值(柱状图)
+     * @param dataType
+     * @param yAxisName
+     * @param tableName
+     * @param xAxisName
+     * @param firstIndex
+     * @param afterIndex
+     * @param screen
+     * @return
+     */
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} where TO_CHAR(${xAxisName},'YYYY-MM') between #{firstIndex} and #{afterIndex} ${screen}")
+    Double getHistogramTimeValueYear(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
+                                     @Param("xAxisName") String xAxisName, @Param("firstIndex") String firstIndex,
+                                     @Param("afterIndex") String afterIndex, @Param("screen") String screen);
     //时间为空时间值
     @Select("select ${dataType}(${yAxisName}) from ${tableName} where ${xAxisName} is null ${screen}")
     String getTimeIsNull(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
@@ -105,13 +136,19 @@ public interface ShowChartsMapper {
                           @Param("xColumn") String xColumn, @Param("timeType") String timeType, @Param("xColumnIndex") String xColumnIndex
                            );
 
-    //查询时间类型分组的值->优化后
+    //查询时间类型分组的值->优化后(折线图)
     @Select("select ${dataType}(${yAxisName}) as \"value\",TO_CHAR(${xColumn},${timeType}) as \"date\" from ${tableName} where ${groupsColumn}=#{groupsIndex} GROUP BY TO_CHAR(${xColumn},${timeType}) ")
     List<LineSeriesMap> getGroupValuesTime(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
                               @Param("groupsColumn") String groupsColumn, @Param("groupsIndex") String groupsIndex,
                               @Param("xColumn") String xColumn, @Param("timeType") String timeType
     );
 
+    //查询时间类型分组的值->优化后(柱状图)
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} where ${groupsColumn}=#{groupsIndex} GROUP BY TO_CHAR(${xColumn},${timeType}) GROUP BY TO_CHAR(${xColumn},${timeType})")
+    List<Double> getHistogramTimeValueGroupValuesTime(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
+                                                      @Param("groupsColumn") String groupsColumn, @Param("groupsIndex") String groupsIndex,
+                                                      @Param("xColumn") String xColumn, @Param("timeType") String timeType);
+
     //查询时间类型分组的值->优化后
     @Select("select ${dataType}(${yAxisName}) as \"value\",TO_CHAR(${xColumn},${timeType}) as \"date\",${groupsColumn} as \"group\" from ${tableName} where ${groupsColumn} IN (SELECT ${groupsColumn} FROM ${tableName} GROUP BY ${groupsColumn}) GROUP BY TO_CHAR(${xColumn},${timeType}),${groupsColumn} ")
     List<LineSeriesGroupMap> getGroupsValuesTime(@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
@@ -135,6 +172,12 @@ public interface ShowChartsMapper {
                             @Param("xAxisName") String xAxisName, @Param("firstIndex") String firstIndex, @Param("afterIndex") String afterIndex,
                                 @Param("groupsColumn") String groupsColumn, @Param("groupsIndex") String groupsIndex, @Param("screen") String screen);
 
+    //查询分组的值(时间类型半年)  柱状图
+    //分组半年时间值
+    @Select("select ${dataType}(${yAxisName}) from ${tableName} where TO_CHAR(${xAxisName},'YYYY-MM') between #{firstIndex} and #{afterIndex} and ${groupsColumn}=#{groupsIndex} ${screen}")
+    Double getHistogramTimeValueHalfYear (@Param("dataType") String dataType, @Param("yAxisName") String yAxisName, @Param("tableName") String tableName,
+                                          @Param("xAxisName") String xAxisName, @Param("firstIndex") String firstIndex, @Param("afterIndex") String afterIndex,
+                                          @Param("groupsColumn") String groupsColumn, @Param("groupsIndex") String groupsIndex, @Param("screen") String screen);
 
     /*
    总体未分组

+ 34 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/common/MessageLogMapper.java

@@ -0,0 +1,34 @@
+package com.usoftchina.bi.server.dao.common;
+
+import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.model.po.MessageLog;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface MessageLogMapper {
+
+    @Insert("INSERT INTO BI_MESSAGELOG(BML_MODULE,BML_ORDER,BML_ID,BML_DATE,BML_MAN,BML_CONTENT,BML_RESULT,BML_SEARCH) "
+            + "VALUES(#{module,jdbcType=VARCHAR}, #{order,jdbcType=VARCHAR}, #{id,jdbcType=INTEGER}, SYSDATE, #{userName,jdbcType=VARCHAR},"
+            + "#{content,jdbcType=VARCHAR}, #{result,jdbcType=VARCHAR}, #{search,jdbcType=VARCHAR})")
+    @SelectKey(before=true,keyProperty="id",resultType=Integer.class,statement="SELECT BI_MESSAGELOG_SEQ.NEXTVAL FROM DUAL",keyColumn = "id")
+    void insert(MessageLog messageLog);
+
+
+    @Select("SELECT * FROM BI_MESSAGELOG ORDER BY BML_ID DESC")
+    @Results(id = "BaseResultMap", value = {
+            @Result(id = true, column = "BML_ID", property = "id", jdbcType = JdbcType.INTEGER),
+            @Result(column = "BML_DATE", property = "date", jdbcType = JdbcType.TIMESTAMP),
+            @Result(column = "BML_MAN", property = "userName", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "BML_CONTENT", property = "content", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "BML_RESULT", property = "result", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "BML_SEARCH", property = "search", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "BML_MODULE", property = "module", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "BML_ORDER", property = "order", jdbcType = JdbcType.VARCHAR),
+    })
+    List<MessageLog> list(TestPage testPage);
+}

+ 8 - 0
bi-server/src/main/java/com/usoftchina/bi/server/dao/dashboard/DashBoardMenuMapper.java

@@ -55,6 +55,14 @@ public interface DashBoardMenuMapper {
     @Delete("DELETE FROM BI_DASHBOARDS_MENU WHERE BDM_ID = #{id, jdbcType=INTEGER}")
     void deleteByPrimaryKey(Long id);
 
+    /**
+     * 查询此看板目录下有多少个看板
+     * @param id        看板目录ID
+     * @return
+     */
+    @Select("SELECT COUNT(*) FROM BI_DASHBOARDS WHERE BD_MENUID = #{id}")
+    int countDashboardByMenuId(Long id);
+
     /**
      * 更新看板所属目录
      * @param dashBoardUpdateMenuInfo

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

@@ -250,6 +250,26 @@ public interface DataConnectorMapper {
             "</script>")
     void updataConnectorGroup(GroupInfo groupInfo);
 
+    /**
+     * 删除分组时,将数据源分组更新成默认值 -1
+     * @param id  数据源分组ID
+     */
+    @Update("UPDATE BI_DATA_CONNECTORS SET BD_GROUP = -1 WHERE BD_GROUP = #{id,jdbcType=INTEGER}")
+    void updateGroupIdToDefault(Long id);
+
+    /**
+     * 删除分组时,将数据源分组更新成默认值 -1
+     * @param groupInfoList  数据源分组信息
+     */
+    @Update("<script>"
+            + "UPDATE BI_DATA_CONNECTORS SET BD_GROUP = -1 WHERE BD_GROUP IN "
+            + "<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" close=\")\" separator=\",\">"
+            +   "#{item.id, jdbcType=INTEGER}"
+            + "</foreach>"
+            + "</script>"
+           )
+    void batchUpdateGroupIdToDefault(List<GroupInfo> groupInfoList);
+
     /*
     删除分组
      */
@@ -319,6 +339,15 @@ public interface DataConnectorMapper {
             "create_date as createDate from bi_base_group_by")
     List<GroupInfo> getConnectorGroup();
 
+    /**
+     * 通过分组Id查询数据源分组
+     * @param id  分组ID
+     * @return
+     */
+    @Select("select bb_id as id, bb_group_name as groupName, bb_index as groupIndex, bb_father_id as fatherId, create_by as createBy," +
+            "create_date as createDate from bi_base_group_by WHERE BB_ID = #{id}")
+    GroupInfo getConnectorGroupById(int id);
+
     /*
    查询数据源是否关联图表
     */

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

@@ -117,7 +117,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")
+            "from bi_users WHERE BU_CLASS <> '离职'")
     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 +129,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 rownum < #{count, jdbcType=INTEGER}")
+            "from bi_users where bu_name ${condition} AND BU_CLASS <> '离职' and rownum < #{count, jdbcType=INTEGER}")
     List<User> getNameList(@Param("condition") String condition, @Param("count") Long count);
 
     /*
@@ -190,7 +190,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 " +
             " from bi_users,bi_user_groups,bi_user_rel_groups where bi_users.bu_id=bi_user_rel_groups.br_user_id and " +
-            " bi_user_rel_groups.br_user_group=bi_user_groups.bg_id and bi_user_groups.bg_id = #{id}")
+            " bi_user_rel_groups.br_user_group=bi_user_groups.bg_id and bi_user_groups.bg_id = #{id} AND BU_CLASS <> '离职'")
     List<User> getGroupUserList(int id);
 
     /*

+ 9 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/po/ColumnToShow.java

@@ -9,6 +9,15 @@ public class ColumnToShow {
     private String columnType;
     private String isGroup;
     private String isSubsection;
+    private String isFilter;
+
+    public String getIsFilter() {
+        return isFilter;
+    }
+
+    public void setIsFilter(String isFilter) {
+        this.isFilter = isFilter;
+    }
 
     public String getColumnName() {
         return columnName;

+ 132 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/po/MessageLog.java

@@ -0,0 +1,132 @@
+package com.usoftchina.bi.server.model.po;
+
+import java.util.Date;
+
+/**
+ * @Author chenwei
+ * @Date 2019-04-26
+ */
+public class MessageLog {
+
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 操作时间
+     */
+    private Date date;
+    /**
+     * 操作人
+     */
+    private String userName;
+    /**
+     * 操作内容
+     */
+    private String content;
+    /**
+     * 操作结果
+     */
+    private String result;
+    /**
+     * 搜索字段
+     */
+    private String search;
+    /**
+     * 模块名
+     */
+    private String module;
+    /**
+     * 单据名称
+     */
+    private String order;
+
+    @Override
+    public String toString() {
+        return "MessageLog{" +
+                "id=" + id +
+                ", date=" + date +
+                ", userName='" + userName + '\'' +
+                ", content='" + content + '\'' +
+                ", result='" + result + '\'' +
+                ", search='" + search + '\'' +
+                '}';
+    }
+
+    public MessageLog() {
+    }
+
+    public MessageLog(String userName, String content, String result, String search, String module, String order) {
+        this.userName = userName;
+        this.content = content;
+        this.result = result;
+        this.search = search;
+        this.module = module;
+        this.order = order;
+    }
+
+    public Integer getId() {
+
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public String getSearch() {
+        return search;
+    }
+
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public void setModule(String module) {
+        this.module = module;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+}

+ 37 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/pojo/annotation/Log.java

@@ -0,0 +1,37 @@
+package com.usoftchina.bi.server.model.pojo.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 日志注解
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log {
+
+    /**
+     * 模块名称:  看板/图表 等等
+     * @return
+     */
+    String module() default "";
+
+    /**
+     * 单据名称   具体的单据名称,如: 图表中的 '销售情况分析折线图'
+     * @return
+     */
+    String name() default "";
+
+    /**
+     * 身份token
+     * @return
+     */
+    String token() default "";
+
+    /**
+     * 前端传入的自定义centent
+     * @return
+     */
+    String value() default "";
+
+}

+ 43 - 14
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ChartsConfigService.java

@@ -1,5 +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;
@@ -13,9 +14,11 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.bi.server.model.bo.GroupUpdateId;
 import com.usoftchina.bi.server.model.po.ChartConfig;
 import com.usoftchina.bi.server.model.po.ChartConfigList;
+import com.usoftchina.bi.server.model.po.MessageLog;
 import com.usoftchina.bi.server.model.vo.configVo.ChangeOrderInfo;
 import com.usoftchina.bi.server.model.vo.configVo.ChartConfigInfo;
 import com.usoftchina.bi.server.model.vo.configVo.GroupInfo;
+import com.usoftchina.bi.server.service.common.MessageLogService;
 import com.usoftchina.bi.server.service.strategy.StrategysService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +40,8 @@ public class ChartsConfigService {
     StrategysService strategysService;
     @Autowired
     UserMapper userMapper;
+    @Autowired
+    private MessageLogService messageLogService;
 
     /*
     保存表设置
@@ -157,36 +162,46 @@ public class ChartsConfigService {
     移交图表
      */
     public RepEntity changeChartOrder(ChangeOrderInfo changeOrderInfo, String token){
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resMap.get("id"));
-        String name = userMapper.getName(changeOrderInfo.getUserId());
+        int userId = BaseContextHolder.getUserId();
+        String username = BaseContextHolder.getUserName();
         int createId = chartsConfigMapper.getCreateId(changeOrderInfo.getId());
         if (createId != userId){
             return new RepEntity(RepCode.NoAuthority);
         }
-        chartsConfigMapper.changeChartOrder(name, changeOrderInfo.getUserId(), changeOrderInfo.getId());
+        chartsConfigMapper.changeChartOrder(username, changeOrderInfo.getUserId(), changeOrderInfo.getId());
+        //记录LOg
+        String chartName = chartsConfigMapper.getOneChart(changeOrderInfo.getId()).getChartName();
+        messageLogService.update("图表", chartName, username, "移交图表");
         return new RepEntity(RepCode.success);
     }
 
     /*
     更新图表配置的分组
      */
-    public RepEntity updateConfigGroup(GroupUpdateId groupUpdateId){
+    public RepEntity updateConfigGroup(String token, GroupUpdateId groupUpdateId){
+        String username = BaseContextHolder.getUserName();
         int chartId = groupUpdateId.getId();
         int chartGroupId = groupUpdateId.getGroupId();
         chartsConfigMapper.updateConfigGroup(chartId, chartGroupId);
+        //记录LOg
+        String chartName = chartsConfigMapper.getOneChart(chartId).getChartName();
+        messageLogService.update("图表", chartName, username, "更新图表分组");
         return new RepEntity(RepCode.success);
     }
 
     /*
     删除图表
      */
-    public RepEntity delChartsConfig(Long id){
+    public RepEntity delChartsConfig(String token, Long id){
+        String username = BaseContextHolder.getUserName();
         int count = chartsConfigMapper.countDashboardsById(id);
         if (count > 0) {
             throw new MyException(RepCode.DASHBOARD_USED_CHARTS);
         }
+        String chartName = chartsConfigMapper.getOneChart(id.intValue()).getChartName();
         chartsConfigMapper.deleteCharts(id);
+        //记录LOg
+        messageLogService.delete("图表", chartName, username, "删除图表分组");
         return new RepEntity(RepCode.success);
     }
 
@@ -194,8 +209,7 @@ public class ChartsConfigService {
     查询图表列表
      */
     public RepEntity getListCharts(String token, TestPage testPage){
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        int id = Integer.parseInt(resMap.get("id"));
+        int id = BaseContextHolder.getUserId();
         List<ChartConfigList> chartsList = chartsConfigMapper.getListByUser(id,testPage.enablePaging());
         PageInfo<ChartConfigList> pageInfo = new PageInfo<>(chartsList);
         return new RepEntity(RepCode.success, pageInfo);
@@ -219,24 +233,32 @@ public class ChartsConfigService {
     /*
     创建图表分组
      */
-    public RepEntity setDataConnectorGroup(GroupInfo groupInfo){
+    public RepEntity setDataConnectorGroup(String token, GroupInfo groupInfo){
+        String username = BaseContextHolder.getUserName();
         if (groupInfo == null){
             return new RepEntity(RepCode.Null);
         }
         chartsConfigMapper.setChartsGroup(groupInfo);
         int id = groupInfo.getId();
+        //记录LOg
+        MessageLog messageLog = new MessageLog(username, "创建图表分组", "创建成功", "", "图表", groupInfo.getGroupName());
+        messageLogService.customizeLog(messageLog);
         return new RepEntity(RepCode.success, id);
     }
 
     /*
     更新图表分组
      */
-    public RepEntity updataDataConnectorGroup(GroupInfo groupInfo){
+    public RepEntity updataDataConnectorGroup(String token, GroupInfo groupInfo){
+        String username = BaseContextHolder.getUserName();
         chartsConfigMapper.updataChartsGroup(groupInfo);
+        //记录LOg
+        messageLogService.update("图表", groupInfo.getGroupName(), username, "更新图表分组");
         return new RepEntity(RepCode.success);
     }
 
-    public RepEntity saveChartsGroup(List<GroupInfo> groupInfoList) {
+    public RepEntity saveChartsGroup(String token, List<GroupInfo> groupInfoList) {
+        String username = BaseContextHolder.getUserName();
         List<GroupInfo> addGroupInfoList = new ArrayList<>();
         List<GroupInfo> deleteGroupInfoList = new ArrayList<>();
         List<GroupInfo> updateGroupInfoList = new ArrayList<>();
@@ -250,12 +272,16 @@ public class ChartsConfigService {
             }
         });
         if (addGroupInfoList.size() > 0) {
+            messageLogService.save("图表分组", null, username, "批量创建图表分组");
             chartsConfigMapper.batchInsertCharts(addGroupInfoList);
         }
         if (updateGroupInfoList.size() > 0) {
+            messageLogService.save("图表分组", null, username, "批量更新图表分组");
             chartsConfigMapper.batchUpdateCharts(updateGroupInfoList);
         }
         if (deleteGroupInfoList.size() > 0) {
+            messageLogService.save("图表分组", null, username, "批量删除图表分组");
+            chartsConfigMapper.batchUpdateGroupToDefault(deleteGroupInfoList);
             chartsConfigMapper.batchDeleteCharts(deleteGroupInfoList);
         }
         return new RepEntity(RepCode.success);
@@ -264,21 +290,23 @@ public class ChartsConfigService {
     /*
     批量更新图表分组
      */
-    public RepEntity updataListGroup(List<GroupInfo> groupInfoList){
+    public RepEntity updataListGroup(String token, List<GroupInfo> groupInfoList){
+        String username = BaseContextHolder.getUserName();
         Iterator isList = groupInfoList.iterator();
         GroupInfo groupInfo = new GroupInfo();
         while (isList.hasNext()){
             groupInfo = (GroupInfo) isList.next();
             chartsConfigMapper.updataChartsGroup(groupInfo);
         }
-
+        messageLogService.save("图表分组", null, username, "批量更新图表分组");
         return new RepEntity(RepCode.success);
     }
 
     /*
     删除图表分组
      */
-    public RepEntity delDataConnectorGroup(List<Integer> idList){
+    public RepEntity delDataConnectorGroup(String token, List<Integer> idList){
+        String username = BaseContextHolder.getUserName();
         List<Integer> integerList = idList;
         Iterator isList = integerList.iterator();
         while (isList.hasNext()){
@@ -293,6 +321,7 @@ public class ChartsConfigService {
             }
         }
         chartsConfigMapper.delChartsGroup(idList);
+        messageLogService.save("图表分组", null, username, "批量删除图表分组");
         return new RepEntity(RepCode.success);
     }
 

+ 26 - 33
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowHistogramService.java

@@ -138,26 +138,10 @@ public class ShowHistogramService {
             }
 
             //无分组时Y值
-            Iterator itX = xAxisData.iterator();
-            while (itX.hasNext()){
-                String xdata = (String)itX.next();
-                double valueOne = 0;
-                String valueOnes = null;
-                if ("time".equals(xColumnType)){
-                    valueOnes = timeConverterUtil.getTimeValueConverter(yColumn, xColumn, tableName, yAxisType, xAxisType, xdata, screenToColumnS);
-                }else {
-                    if (xdata == null || "".equals(xdata)){
-                        valueOnes = showChartsMapper.getValuesIsNull(yColumn, xColumn, tableName, yAxisType, screenToColumnS);
-                    }else {
-                        valueOnes = showChartsMapper.getValues(yColumn, xColumn, tableName, yAxisType, xdata, screenToColumnS);
-                    }
-                }
-                if (valueOnes == null || "".equals(valueOnes)){
-                    valueOne = 0;
-                }else {
-                    valueOne = Double.parseDouble(valueOnes);
-                }
-                value.add(valueOne);
+            if ("time".equals(xColumnType)){        //如果是时间类型
+                value = timeConverterUtil.getHistogramTimeValue(yColumn, xColumn, tableName, yAxisType, xAxisType, xAxisData, screenToColumnS);
+            }else {
+                value = showChartsMapper.getValues(yColumn, xColumn, tableName, yAxisType, screenToColumnS);
             }
 
             series.setName(xColumn);
@@ -167,16 +151,16 @@ public class ShowHistogramService {
             //有分组
             if (groupBy.size() != 0){
                 serieses.remove(0);
-                Iterator itGroup = groupBy.iterator();  //分组数
+                Iterator<String> itGroup = groupBy.iterator();  //分组数
 
                 //便利分组
                 while (itGroup.hasNext()){
-                    String groupByName = (String) itGroup.next(); //每个分组的组名
+                    String groupByName = itGroup.next(); //每个分组的组名
                     int counts = showChartsMapper.getGroupsCount(groupByName,tableName, screenToColumnS);
-                    if (counts > 20){
+                    if (counts > histogramConfigInfo.getMaxCount()){
                         chartsDataInfo.setTooMany(true);
                     }
-                    List<String> groupsData = showChartsMapper.getGroups(groupByName,tableName, screenToColumnS, 20); //查询每个分组系列
+                    List<String> groupsData = showChartsMapper.getGroups(groupByName,tableName, screenToColumnS, histogramConfigInfo.getMaxCount()); //查询每个分组系列
                     Iterator itGroupsData = groupsData.iterator();
 
                     //每个分组得到得每个系列
@@ -195,14 +179,13 @@ public class ShowHistogramService {
                             double groupsValueOne = 0;
                             String groupsValueOnes = null;
                             if ("time".equals(xColumnType)){
-                                groupsValueOnes = timeConverterUtil.getGroupTimeConverter(yAxisType, yColumn, tableName, groupByName, xAxisType,
-                                        groupsName, xColumn, xAxisDataOne, screenToColumnS);
+                                groupsValue = timeConverterUtil.getHistogramGroupTime(yAxisType, yColumn, tableName, groupByName, xAxisType,
+                                        groupsName, xColumn, xAxisData, screenToColumnS);
                             }else {
                                 String xColumnKey = "";
                                 if (xAxisDataOne == null || "".equals(xAxisDataOne)){
                                     xColumnKey  = xColumn + " is null";
-                                }else
-                                {
+                                }else {
                                     xColumnKey = xColumn + " = '" +xAxisDataOne +"'";
                                 }
 
@@ -212,6 +195,7 @@ public class ShowHistogramService {
                                 }else {
                                     groupByKey = groupByName + " = '" +groupsName +"'";
                                 }
+                                //groupsValue = showChartsMapper.getGroupsValue(yAxisType, yColumn, tableName, groupByKey, xColumnKey, screenToColumnS);
                                 groupsValueOnes = showChartsMapper.getGroupsValue(yAxisType, yColumn, tableName, groupByKey, xColumnKey, screenToColumnS);
                             }
                             if ("".equals(groupsValueOnes) || groupsValueOnes == null){
@@ -222,6 +206,15 @@ public class ShowHistogramService {
                             groupsValue.add(groupsValueOne);
                         }
 
+                        /*if ("time".equals(xColumnType)){
+                            groupsValue = timeConverterUtil.getHistogramGroupTime(yAxisType, yColumn, tableName, groupByName, xAxisType,
+                                    groupsName, xColumn, xAxisData, screenToColumnS);
+                        }else {
+                            String xColumnKey = xColumn;
+                            String groupByKey =groupByName + " = '" +groupsName +"'";
+                            groupsValue = showChartsMapper.getGroupsValues(yAxisType, yColumn, tableName, groupByKey, xColumnKey, screenToColumnS);
+                        }*/
+
                         ne.setValue(groupsValue);
                         serieses.add(ne);
                     }
@@ -230,11 +223,11 @@ public class ShowHistogramService {
 
             chartsDataInfo.setSerieses(serieses);
         }catch (Exception e){
-        e.printStackTrace();
-        return new RepEntity(RepCode.erro);
-    }finally {
-        DynamicDataSourceContextHolder.clearDataSourceType();
-    }
+            e.printStackTrace();
+            return new RepEntity(RepCode.erro.getCode(), e.getCause().getMessage(), null);
+        }finally {
+            DynamicDataSourceContextHolder.clearDataSourceType();
+        }
 
         return new RepEntity(RepCode.success, chartsDataInfo);
     }

+ 3 - 3
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowPieService.java

@@ -134,7 +134,7 @@ public class ShowPieService {
         while (itX.hasNext()){
             String xdata = (String)itX.next();
             if ("".equals(xdata) || xdata == null){
-                continue;
+                //continue;
             }
             double valueOne = 0;
             String valueOnes = null;
@@ -145,7 +145,7 @@ public class ShowPieService {
                 if (xdata == null || "".equals(xdata)){
                     valueOnes = showChartsMapper.getValuesIsNull(yColumn, xColumn, tableName, yAxisType, screenToColumnS);
                 }else {
-                    valueOnes = showChartsMapper.getValues(yColumn, xColumn, tableName, yAxisType, xdata, screenToColumnS);
+                    valueOnes = showChartsMapper.getXValue(yColumn, xColumn, tableName, yAxisType, xdata, screenToColumnS);
                 }
             }
             if (valueOnes == null || "".equals(valueOnes)){
@@ -165,7 +165,7 @@ public class ShowPieService {
         chartsDataInfo.setSerieses(serieses);
         }catch (Exception e){
             e.printStackTrace();
-            return new RepEntity(RepCode.erro);
+            return new RepEntity(RepCode.erro.getCode(), e.getCause().getMessage(), null);
         }finally {
             DynamicDataSourceContextHolder.clearDataSourceType();
         }

+ 2 - 2
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/ShowScatterService.java

@@ -142,7 +142,7 @@ public class ShowScatterService {
                 if (xdata == null || "".equals(xdata)){
                     valueOnes = showChartsMapper.getValuesIsNull(yColumn, xColumn, tableName, yAxisType, screenToColumnS);
                 }else {
-                    valueOnes = showChartsMapper.getValues(yColumn, xColumn, tableName, yAxisType, xdata ,screenToColumnS);
+                    valueOnes = showChartsMapper.getXValue(yColumn, xColumn, tableName, yAxisType, xdata ,screenToColumnS);
                 }
             }
             if (valueOnes == null || "".equals(valueOnes)){
@@ -233,7 +233,7 @@ public class ShowScatterService {
         chartsDataInfo.setSerieses(serieses);
         }catch (Exception e){
             e.printStackTrace();
-            return new RepEntity(RepCode.erro);
+            return new RepEntity(RepCode.erro.getCode(), e.getCause().getMessage(), null);
         }finally {
             DynamicDataSourceContextHolder.clearDataSourceType();
         }

+ 91 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/chart/TimeConverterUtil.java

@@ -154,6 +154,51 @@ public class TimeConverterUtil {
         return value;
     }
 
+    /**
+     * 无分组时间值(柱状图)
+     * @param yColumn
+     * @param xColumn
+     * @param tableName
+     * @param dataType
+     * @param timeType
+     * @param xAxisData
+     * @param screen
+     * @return
+     */
+    public List<Double> getHistogramTimeValue(String yColumn, String xColumn, String tableName, String dataType, String timeType, List<String> xAxisData, String screen){
+        String timeGroup = "'YYYY-MM-DD'";
+        List<Double> result = new ArrayList<>();
+        Double value = null;
+        //判断时间类型
+        if ("halfYear".equals(timeType)) {
+            for(String xData : xAxisData) {
+                String firstIndex = null;
+                String afterIndex = null;
+                String[] str = xData.split("-");
+                if ("H1".equals(str[1])) {
+                    firstIndex = str[0] + "-01";
+                    afterIndex = str[0] + "-06";
+                } else {
+                    firstIndex = str[0] + "-07";
+                    afterIndex = str[0] + "-12";
+                }
+                value = showChartsMapper.getHistogramTimeValueYear(dataType, yColumn, tableName, xColumn, firstIndex, afterIndex, screen);
+                result.add(value);
+            }
+            return result;
+        } else if ("year".equals(timeType)) {
+            timeGroup = "'YYYY'";
+        } else if ("month".equals(timeType)) {
+            timeGroup = "'YYYY-MM'";
+        } else if ("day".equals(timeType) || "".equals(timeType)) {
+        } else if ("quarter".equals(timeType)) {
+            timeGroup = "'YYYY-Q'";
+        } else if ("week".equals(timeType)) {
+            timeGroup = "'YYYY-WW'";
+        }
+        return showChartsMapper.getHistogramTimeValue(dataType, yColumn, tableName, xColumn, timeGroup, screen);
+    }
+
     //有分组时间类型值处理
     public String getGroupTimeConverter(String dataType, String yColumn, String tableName, String groupByName, String timeType,
                                         String groupsName, String xColumn, String xAxisDataOne, String screen){
@@ -200,4 +245,50 @@ public class TimeConverterUtil {
         }
         return value;
     }
+
+    /**
+     * 有分组时间类型值处理(柱状图)
+     * @param dataType
+     * @param yColumn
+     * @param tableName
+     * @param groupByName
+     * @param timeType
+     * @param groupsName
+     * @param xColumn
+     * @param xAxisData
+     * @param screen
+     * @return
+     */
+    public List<Double> getHistogramGroupTime(String dataType, String yColumn, String tableName, String groupByName, String timeType,
+                                        String groupsName, String xColumn, List<String> xAxisData, String screen){
+        String timeGroup = "'YYYY-MM-DD'";
+        Double value = null;
+        List<Double> result = new ArrayList<>();
+        if ("halfYear".equals(timeType)) {
+            for (String xAxisDataOne : xAxisData) {
+                String firstIndex = null;
+                String afterIndex = null;
+                String[] str = xAxisDataOne.split("-");
+                if ("上半年".equals(str[1])) {
+                    firstIndex = str[0] + "-01";
+                    afterIndex = str[0] + "-06";
+                } else {
+                    firstIndex = str[0] + "-07";
+                    afterIndex = str[0] + "-12";
+                }
+                value = showChartsMapper.getHistogramTimeValueHalfYear(dataType, yColumn, tableName, xColumn, firstIndex, afterIndex, groupByName, groupsName, screen);
+                result.add(value);
+            }
+            return result;
+        } else if ("year".equals(timeType)) {
+            timeGroup = "'YYYY'";
+        } else if ("month".equals(timeType)) {
+            timeGroup = "'YYYY-MM'";
+        } else if ("quarter".equals(timeType)) {
+            timeGroup = "'YYYY-Q'";
+        } else if ("week".equals(timeType)) {
+            timeGroup = "'YYYY-WW'";
+        }
+        return showChartsMapper.getHistogramTimeValueGroupValuesTime(dataType, yColumn, tableName, groupByName, groupsName, xColumn, timeGroup);
+    }
 }

+ 56 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/common/MessageLogService.java

@@ -0,0 +1,56 @@
+package com.usoftchina.bi.server.service.common;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.bi.core.base.TestPage;
+import com.usoftchina.bi.server.dao.common.MessageLogMapper;
+import com.usoftchina.bi.server.model.po.MessageLog;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * @Author chenwei
+ * @Date 2019-04-26
+ */
+@Service
+public class MessageLogService {
+
+    @Autowired
+    private MessageLogMapper messageLogMapper;
+
+    public PageInfo<MessageLog> list(TestPage testPage) {
+        List<MessageLog> messageLogList = messageLogMapper.list(testPage.enablePaging());
+        return new PageInfo<MessageLog>(messageLogList);
+    }
+
+    public void save(String module, String name, String username, String content){
+        if (StringUtils.isEmpty(content)) {
+            content = "保存操作";
+        }
+        MessageLog messageLog = new MessageLog(username, content, "保存成功", null, module, name);
+        customizeLog(messageLog);
+    }
+
+    public void update(String module, String name, String username, String content){
+        if (StringUtils.isEmpty(content)) {
+            content = "更新操作";
+        }
+        MessageLog messageLog = new MessageLog(username, content, "更新成功", null, module, name);
+        customizeLog(messageLog);
+    }
+
+    public void delete(String module, String name, String username, String content){
+        if (StringUtils.isEmpty(content)) {
+            content = "删除操作";
+        }
+        MessageLog messageLog = new MessageLog(username, content, "删除成功", null, module, name);
+        customizeLog(messageLog);
+    }
+
+    public void customizeLog(MessageLog messageLog){
+        messageLogMapper.insert(messageLog);
+    }
+
+}

+ 6 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashBoardMenuService.java

@@ -2,6 +2,7 @@ package com.usoftchina.bi.server.service.dashboard;
 
 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.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.dashboard.DashBoardMenuMapper;
 import com.usoftchina.bi.server.model.vo.configVo.DashBoardMenuInfo;
@@ -51,6 +52,11 @@ public class DashBoardMenuService {
 
     public void deleteById(Long id){
         Assert.state(id > 0, "参数错误");
+        // 判断是否存在报表,存在不允许删除目录
+        int count = dashBoardMenuMapper.countDashboardByMenuId(id);
+        if (count > 0) {
+            throw new MyException(RepCode.MENU_USED_DASHBOARD);
+        }
         dashBoardMenuMapper.deleteByPrimaryKey(id);
     }
 

+ 41 - 17
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsService.java

@@ -3,6 +3,7 @@ package com.usoftchina.bi.server.service.dashboard;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.EncryUtil;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
@@ -24,6 +25,7 @@ import com.usoftchina.bi.server.model.vo.dataVo.DashboardOrderInfo;
 import com.usoftchina.bi.server.model.vo.dataVo.DataSourceCopyInfo;
 import com.usoftchina.bi.server.service.chart.ChartsUtilService;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
+import com.usoftchina.bi.server.service.common.MessageLogService;
 import com.usoftchina.bi.server.service.dataSource.DataConnectorService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,6 +52,8 @@ public class DashboardsService {
     private DataConnectorService dataConnectorService;
     @Autowired
     private ChartsConfigMapper chartsConfigMapper;
+    @Autowired
+    private MessageLogService messageLogService;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DashboardsService.class);
 
@@ -58,7 +62,8 @@ public class DashboardsService {
      */
     public RepEntity setDashboards(String token, DashboardsInfo dashboardsInfo) {
         //校验报表编号是否已存在
-        validCode(dashboardsInfo.getBdCode(), dashboardsInfo.getId());
+        String code = validCode(dashboardsInfo.getBdCode(), dashboardsInfo.getId());
+        dashboardsInfo.setBdCode(code);
         Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
         int userId = Integer.parseInt(stringMap.get("id"));
         String name = stringMap.get("name");
@@ -84,7 +89,8 @@ public class DashboardsService {
      */
     public RepEntity updateDashboards(String token, DashboardsInfo dashboardsInfo) {
         //校验报表编号是否已存在
-        validCode(dashboardsInfo.getBdCode(), dashboardsInfo.getId());
+        String code = validCode(dashboardsInfo.getBdCode(), dashboardsInfo.getId());
+        dashboardsInfo.setBdCode(code);
         Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
         int userId = Integer.parseInt(stringMap.get("id"));
         String name = stringMap.get("name");
@@ -127,28 +133,51 @@ public class DashboardsService {
      * @param code
      * @param id
      */
-    private void validCode(String code, int id) {
+    private String validCode(String code, int id) {
         if (!StringUtils.isEmpty(code)) {
             int count = dashboardsMapper.countBdCodeById(code, id);
             if (count > 0) {
                 throw new MyException("编号" + code + "已存在");
             }
+            return code;
+        }else {
+            return generateUUCode(id);
+        }
+    }
+
+    /**
+     * 创建报表唯一编号
+     * @param id
+     * @return
+     */
+    private String generateUUCode(int id){
+        String UUcode = UUID.randomUUID().toString();
+        UUcode = UUcode.substring(UUcode.lastIndexOf("-") + 1);
+        int count = dashboardsMapper.countBdCodeById(UUcode, id);
+        if (count > 0) {
+            generateUUCode(id);
         }
+        return UUcode;
     }
 
     /*
     删除看板
      */
     public RepEntity delDashboards(String token, Integer id) {
-        Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(stringMap.get("id"));
+        int userId = BaseContextHolder.getUserId();
         int createId = dashboardsMapper.getCreateIdById(id);
         if (userId != createId) {
             return new RepEntity(RepCode.NoAuthority);
         }
+        Dashboards dashboards = dashboardsMapper.getDashboards(userId, id);
+        String name = null;
+        if (!ObjectUtils.isEmpty(dashboards)) {
+            name = dashboards.getBdName();
+        }
         dashboardsMapper.delDashboards(id);
         //删除看板-图表关联关系
         dashboardsMapper.deleteDashboardChartRelation(id);
+        messageLogService.delete("看板", name, BaseContextHolder.getUserName(), null);
         return new RepEntity(RepCode.success);
     }
 
@@ -156,8 +185,7 @@ public class DashboardsService {
     查看看板
      */
     public RepEntity getListDashboards(String token, TestPage testPage) {
-        Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
-        int id = Integer.parseInt(stringMap.get("id"));
+        int id = BaseContextHolder.getUserId();
         List<Dashboards> getListDashboards = dashboardsMapper.getListDashboards(id, testPage.enablePaging());
         PageInfo<Dashboards> pageInfo = new PageInfo<>(getListDashboards);
         return new RepEntity(RepCode.success, pageInfo);
@@ -167,8 +195,7 @@ public class DashboardsService {
     查看单个看板
      */
     public RepEntity getDashboards(String token, int id) {
-        Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(stringMap.get("id"));
+        int userId = BaseContextHolder.getUserId();
         Dashboards dashboards = dashboardsMapper.getDashboards(userId, id);
         if (dashboards == null){
             return new RepEntity(RepCode.DashboardNonExistent);
@@ -258,8 +285,7 @@ public class DashboardsService {
     转交看板
      */
     public RepEntity changeDashOrder(String token, ChangeOrderInfo changeOrderInfo) {
-        Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(stringMap.get("id"));
+        int userId = BaseContextHolder.getUserId();
         int createId = dashboardsMapper.getCreateIdById(changeOrderInfo.getId());
         if (userId != createId) {
             return new RepEntity(RepCode.NoAuthority);
@@ -273,8 +299,7 @@ public class DashboardsService {
     查看看板分发对象
      */
     public RepEntity getDashOrder(String token, int dashId) {
-        Map<String, String> stringMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(stringMap.get("id"));
+        int userId = BaseContextHolder.getUserId();
         int createId = dashboardsMapper.getCreateIdById(dashId);
         if (userId != createId) {
             return new RepEntity(RepCode.NoAuthority);
@@ -305,9 +330,8 @@ public class DashboardsService {
      */
     @Transactional
     public RepEntity copy(String token, DashboardCopyInfo dashboardCopyInfo) {
-        Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resultMap.get("id"));
-        String userName = resultMap.get("name");
+        int userId = BaseContextHolder.getUserId();
+        String userName = BaseContextHolder.getUserName();
         int dashboardId = dashboardCopyInfo.getDashboardId(),
             dataSourceId = dashboardCopyInfo.getDataSourceId();
         List<String> idList = new ArrayList<>();
@@ -347,7 +371,7 @@ public class DashboardsService {
         dashboards.setCreateBy(userName);
         dashboards.setCreateId(userId);
         dashboards.setDemo(false);
-        dashboards.setBdCode("");
+        dashboards.setBdCode(generateUUCode(0));
         dashboardsMapper.setDashboards(dashboards);
         String[] ids = String.join(",", idList).split(",");
         dashboardsMapper.saveDashboardChartRelation(dashboards.getId(), ids);

+ 2 - 1
bi-server/src/main/java/com/usoftchina/bi/server/service/dashboard/DashboardsToChartsUtilService.java

@@ -1,5 +1,6 @@
 package com.usoftchina.bi.server.service.dashboard;
 
+import com.usoftchina.bi.core.utils.EncryUtil;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.usoftchina.bi.server.model.bo.Screen;
@@ -52,7 +53,7 @@ public class DashboardsToChartsUtilService {
     public RepEntity getChartsInDash(ChartsToDashInfo chartsToDashInfo, String token) throws SQLException {
         if (StringUtils.isEmpty(token)) {
             User user = userService.getUserById(chartsToDashInfo.getDashboardCreatorId()).getData();
-            LoginInfo loginInfo = new LoginInfo(user.getUserName(), user.getPassWord());
+            LoginInfo loginInfo = new LoginInfo(user.getUserName(), EncryUtil.decryptPassword(user.getPassWord()));
             token = userService.login(loginInfo).getData().getToken();
         }
         lock.lock();

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

@@ -1,8 +1,9 @@
 package com.usoftchina.bi.server.service.dataSource;
 
+import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.ContextUtil;
-import com.usoftchina.bi.core.utils.JsonUtils;
+import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.dataSource.DataConnectorMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
@@ -19,6 +20,7 @@ import com.usoftchina.bi.server.service.chart.GetChartsDataUtilService;
 import com.usoftchina.bi.core.jdbc.DynamicDataSource;
 import com.usoftchina.bi.core.jdbc.DynamicDataSourceContextHolder;
 import com.usoftchina.bi.core.jdbc.DynamicDataSourceRegister;
+import com.usoftchina.bi.server.service.common.MessageLogService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -41,6 +43,8 @@ public class DataBasesService {
     GetChartsDataUtilService getChartsDataUtilService;
     @Autowired
     private ImplementSqlService implementSqlService;
+    @Autowired
+    private MessageLogService messageLogService;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DataBasesService.class);
     /*
@@ -76,9 +80,9 @@ public class DataBasesService {
      * @param databases
      */
     private void validExists(Databases databases){
-        int count = dataConnectorMapper.countDataBasesName(databases.getDataName());
+        int count = dataConnectorMapper.countDataBasesName(databases.getName());
         if (count > 0) {
-            throw new MyException("已存在连接名为 " + databases.getDataName() + " 的数据连接");
+            throw new MyException("已存在连接名为 " + databases.getName() + " 的数据连接");
         }
         count = dataConnectorMapper.countDataBases(databases);
         if (count > 0) {
@@ -106,11 +110,14 @@ public class DataBasesService {
     删除数据库配置
      */
     public RepEntity delDatabases(Long id){
+        String username = BaseContextHolder.getUserName();
         int count = dataConnectorMapper.countDataConnectorById(id);
         if (count > 0) {
             throw new MyException(RepCode.DATACONNECTOR_USED_DATASOURCE);
         }
+        String databaseName = dataConnectorMapper.getDatabases(id.intValue()).getName();
         dataConnectorMapper.deleteDatabases(id);
+        messageLogService.delete("数据连接", databaseName, username, null);
         return new RepEntity(RepCode.success);
     }
 
@@ -165,6 +172,7 @@ public class DataBasesService {
                 columnToShow.setColumnType(columnRenameInfo.getColumnType());
                 columnToShow.setIsGroup(columnRenameInfo.getIsGroup());
                 columnToShow.setIsSubsection(columnRenameInfo.getIsSubsection());
+                columnToShow.setIsFilter(columnRenameInfo.getIsFilter());
                 toShows.add(columnToShow);
             }
         }

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

@@ -1,5 +1,6 @@
 package com.usoftchina.bi.server.service.dataSource;
 
+import com.usoftchina.bi.core.base.BaseContextHolder;
 import com.usoftchina.bi.core.exception.MyException;
 import com.usoftchina.bi.core.utils.GetTokenDataUtil;
 import com.usoftchina.bi.server.dao.chart.ChartsConfigMapper;
@@ -17,10 +18,12 @@ 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;
 import com.usoftchina.bi.server.model.vo.dataVo.DataSourceCopyInfo;
 import com.usoftchina.bi.server.service.chart.GetChartsDataUtilService;
+import com.usoftchina.bi.server.service.common.MessageLogService;
 import com.usoftchina.bi.server.service.strategy.StrategysService;
 import com.usoftchina.bi.server.service.chart.ChartsUtilService;
 import com.usoftchina.bi.core.jdbc.DynamicDataSourceContextHolder;
@@ -34,6 +37,7 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -61,6 +65,8 @@ public class DataConnectorService {
     GetChartsDataUtilService getChartsDataUtilService;
     @Autowired
     private JdbcTemplate jdbcTemplate;
+    @Autowired
+    private MessageLogService messageLogService;
 
     private static final Logger logger = LoggerFactory.getLogger(DataConnectorService.class);
 
@@ -199,10 +205,9 @@ public class DataConnectorService {
     /*
     转交数据源
      */
-    public RepEntity changeOrder(ChangeOrderInfo changeOrderInfo, String token) {
-        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resMap.get("id"));
-        String name = userMapper.getName(changeOrderInfo.getUserId());
+    public RepEntity changeOrder(ChangeOrderInfo changeOrderInfo) {
+        int userId = BaseContextHolder.getUserId();
+        String name = BaseContextHolder.getUserName();
         int createId = dataConnectorMapper.getCreateIdById(changeOrderInfo.getId());
         if (createId != userId) {
             return new RepEntity(RepCode.NoAuthority);
@@ -214,34 +219,51 @@ public class DataConnectorService {
     /*
     更新数据源分组
      */
-    public RepEntity updateConfigGroup(GroupUpdateId groupUpdateId) {
+    public RepEntity updateConfigGroup(String token, GroupUpdateId groupUpdateId) {
+        String username = BaseContextHolder.getUserName();
         int id = groupUpdateId.getId();
         int groupId = groupUpdateId.getGroupId();
+        GroupInfo groupInfo = dataConnectorMapper.getConnectorGroupById(groupId);
+        String groupName = null;
+        if (!ObjectUtils.isEmpty(groupInfo)) {
+            groupName = groupInfo.getGroupName();
+        }
         dataConnectorMapper.updateConfigGroup(id, groupId);
+        String dataName = dataConnectorMapper.getOneData(id).getDataName();
+        // 记录LOG
+        MessageLog messageLog = new MessageLog(username, "更新数据源分组为( "+ groupName + ")", "更新成功", null, "数据源", dataName);
+        messageLogService.customizeLog(messageLog);
         return new RepEntity(RepCode.success);
     }
 
     /*
     删除数据源
      */
-    public RepEntity delDataConnector(Long id) {
+    public RepEntity delDataConnector(String token, Long id) {
+        String username = BaseContextHolder.getUserName();
+        String dataName = dataConnectorMapper.getOneData(id.intValue()).getDataName();
         int count = dataConnectorMapper.countChartsById(id);
         if (count > 0) {
             throw new MyException(RepCode.CHARTS_USED_DATACONNECTOR);
         }
         dataConnectorMapper.deleteData(id);
+        // 记录LOG
+        messageLogService.delete("数据源", dataName, username, null);
         return new RepEntity(RepCode.success);
     }
 
     /*
     创建数据源分组
      */
-    public RepEntity setDataConnectorGroup(GroupInfo groupInfo) {
+    public RepEntity setDataConnectorGroup(String token, GroupInfo groupInfo) {
+        String username = BaseContextHolder.getUserName();
         if (groupInfo == null || "".equals(groupInfo)) {
             return new RepEntity(RepCode.Null);
         }
         dataConnectorMapper.setConnectorGroup(groupInfo);
         int id = groupInfo.getId();
+        // 记录LOG
+        messageLogService.save("数据源分组", groupInfo.getGroupName(), username, "创建数据源分组");
         return new RepEntity(RepCode.success, id);
     }
 
@@ -251,7 +273,8 @@ public class DataConnectorService {
      * @return
      */
     @Transactional
-    public RepEntity saveConnectorGroups(List<GroupInfo> groupInfoList) {
+    public RepEntity saveConnectorGroups(String token, List<GroupInfo> groupInfoList) {
+        String username = BaseContextHolder.getUserName();
         List<GroupInfo> addGroupInfoList = new ArrayList<>();
         List<GroupInfo> deleteGroupInfoList = new ArrayList<>();
         List<GroupInfo> updateGroupInfoList = new ArrayList<>();
@@ -265,12 +288,16 @@ public class DataConnectorService {
             }
         });
         if (addGroupInfoList.size() > 0) {
+            messageLogService.save("数据源分组", null, username, "批量新增数据源分组");
             dataConnectorMapper.batchInsertDataConnector(addGroupInfoList);
         }
         if (updateGroupInfoList.size() > 0) {
+            messageLogService.save("数据源分组", null, username, "批量更新数据源分组");
             dataConnectorMapper.batchUpdateDataConnector(updateGroupInfoList);
         }
         if (deleteGroupInfoList.size() > 0) {
+            messageLogService.save("数据源分组", null, username, "批量删除数据源分组");
+            dataConnectorMapper.batchUpdateGroupIdToDefault(deleteGroupInfoList);
             dataConnectorMapper.batchDeleteDataConnector(deleteGroupInfoList);
         }
         return new RepEntity(RepCode.success);
@@ -279,16 +306,17 @@ public class DataConnectorService {
     /*
     更新数据源分组
      */
-    @CacheEvict(value = "singleDataConnector", key = "#body.id")
-    public RepEntity updataDataConnectorGroup(GroupInfo groupInfo) {
+    public RepEntity updataDataConnectorGroup(String token, GroupInfo groupInfo) {
         dataConnectorMapper.updataConnectorGroup(groupInfo);
+        Map<String, String> resMap = GetTokenDataUtil.getTokenData(token);
+        String username = resMap.get("name");
+        messageLogService.update("数据源分组", groupInfo.getGroupName(), username, "更新分组");
         return new RepEntity(RepCode.success);
     }
 
     /*
    批量更新数据源分组
     */
-    @CacheEvict(value = "singleDataConnector")
     public RepEntity updataConnectorGroups(List<GroupInfo> groupInfoList) {
         Iterator isList = groupInfoList.iterator();
         GroupInfo groupInfo = new GroupInfo();
@@ -303,8 +331,8 @@ public class DataConnectorService {
     /*
     删除数据源分组
      */
-    @CacheEvict(value = "singleDataConnector")
-    public RepEntity delDataConnectorGroup(Long id) {
+    public RepEntity delDataConnectorGroup(String token, Long id) {
+        String username = BaseContextHolder.getUserName();
         List<String> groupName = dataConnectorMapper.getFatherId(id.intValue());
         if (groupName.size() != 0) {
             return new RepEntity(RepCode.hasGroupUsing);
@@ -313,7 +341,11 @@ public class DataConnectorService {
         if (chartName.size() != 0) {
             return new RepEntity(RepCode.hasConUsing);
         }
+        String dataName = dataConnectorMapper.getOneData(id.intValue()).getDataName();
         dataConnectorMapper.delConnectorGroup(id);
+        // 更新分组字段值
+        dataConnectorMapper.updateGroupIdToDefault(id);
+        messageLogService.delete("数据源分组", dataName, username, "删除数据源分组");
         return new RepEntity(RepCode.success);
     }
 
@@ -380,9 +412,8 @@ public class DataConnectorService {
      * @return
      */
     public RepEntity<Integer> copyDataSource(String token, DataSourceCopyInfo dataSourceCopyInfo){
-        Map<String, String> resultMap = GetTokenDataUtil.getTokenData(token);
-        int userId = Integer.parseInt(resultMap.get("id"));
-        String userName = resultMap.get("name");
+        int userId = BaseContextHolder.getUserId();
+        String userName = BaseContextHolder.getUserName();
 
         int dataSourceId = dataSourceCopyInfo.getDataSourceId(),
             dataConnectionId = dataSourceCopyInfo.getDataConnectionId();
@@ -395,6 +426,7 @@ public class DataConnectorService {
         dataConnector.setCreateBy(userName);
         dataConnector.setCreateId(userId);
         dataConnector.setDbConId(String.valueOf(dataConnectionId));
+        dataConnector.setTableName(dataConnector.getLoadObject());
         dataConnectorMapper.insertDataConnector(dataConnector);
         int dataId = dataConnector.getDataId();
         return new RepEntity(RepCode.success, dataId);

+ 1 - 1
bi-server/src/main/java/com/usoftchina/bi/server/service/user/SynchronizeEmpInfo.java

@@ -28,7 +28,7 @@ public class SynchronizeEmpInfo {
                        + "USING EMPLOYEE SOURCETABLE "
                        + "ON (SOURCETABLE.EM_CODE = TARGETTABLE.USER_NAME) "
                        + "WHEN MATCHED THEN "
-                       + "  UPDATE  SET TARGETTABLE.BU_CLASS = SOURCETABLE.EM_CLASS, TARGETTABLE.PASS_WORD = SOURCETABLE.EM_PASSWORD, TARGETTABLE.BU_ROLE = SOURCETABLE.EM_TYPE "
+                       + "  UPDATE  SET TARGETTABLE.BU_CLASS = SOURCETABLE.EM_CLASS, TARGETTABLE.PASS_WORD = SOURCETABLE.EM_PASSWORD "
                        + "WHEN NOT MATCHED THEN"
                        + "  INSERT (BU_ID,BU_NAME,BU_DEPARTMENT,BU_POST,BU_USER_GROUP,USER_NAME,PASS_WORD,BU_ROLE,CREATE_DATE,UPDATA_DATE,USER_TOKEN,BU_PHONE,BU_CLASS) "
                        + "  VALUES (SOURCETABLE.EM_ID,SOURCETABLE.EM_NAME,SOURCETABLE.EM_DEFAULTHSNAME,SOURCETABLE.EM_DEPART,NULL,SOURCETABLE.EM_CODE,SOURCETABLE.EM_PASSWORD,SOURCETABLE.EM_TYPE,SYSDATE,NULL,NULL,SOURCETABLE.EM_MOBILE,SOURCETABLE.EM_CLASS)";

+ 1 - 10
bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserService.java

@@ -155,16 +155,7 @@ public class UserService {
     查询匹配用户
      */
     public RepEntity getNameList(String condition, Long count){
-        String value = null;
-        String v = null;
-        try {
-            v = objectMapper.readValue(condition, String.class);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        value = "like '%" + v + "%'";
-
+        String value = "like '%" + condition + "%'";
         List<User> userName = userMapper.getNameList(value, count);
         return new RepEntity(RepCode.success, userName);
     }

+ 92 - 5
bi-server/src/main/java/com/usoftchina/bi/server/utils/ScreenUtil.java

@@ -8,6 +8,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -123,16 +127,22 @@ public class ScreenUtil {
     private String getTimeSymbAndVal(String symbol, String value) {
         String values = "" + value;
         String tar = "";
-        if ("null".equals(symbol)) {
-            tar = "is null";
-        } else if ("notNull".equals(symbol)) {
-            tar = "is not null";
-        } else if ("between".equals(symbol)) {
+        if ("between".equals(symbol)) {
             tar = "";
             String[] str = value.split(",");
             String str1 = str[0];
             String str2 = str[1];
             tar = "between '" + str1 + "' and '" + str2 + "'";
+        } else if ("=".equals(symbol)) {
+            values = TimeFormat(value);
+            if (values.contains(",")) {
+                String[] str = values.split(",");
+                String str1 = str[0];
+                String str2 = str[1];
+                tar = "between '" + str1 + "' and '" + str2 + "'";
+            } else {
+                tar = symbol + " '" + values + "'";
+            }
         } else {
             tar = symbol + " '" + values + "'";
         }
@@ -157,4 +167,81 @@ public class ScreenUtil {
         valueString = valueString.replaceFirst(",", "(") + ")";
         return valueString;
     }
+
+    /**
+     *
+     * @return
+     */
+    private String TimeFormat(String value){
+        String formatValue = "";
+        LocalDate localDate = LocalDate.now();
+        switch (value) {
+            case "today" :
+                formatValue = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "yesterday" :
+                formatValue = localDate.plusDays(-1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "week" :
+                formatValue = localDate.plusWeeks(0).with(DayOfWeek.MONDAY).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(0).with(DayOfWeek.SUNDAY).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "lastweek" :
+                formatValue = localDate.plusWeeks(-1).with(DayOfWeek.MONDAY).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(-1).with(DayOfWeek.SUNDAY).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "month" :
+                formatValue = localDate.plusMonths(0).with(TemporalAdjusters.firstDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(0).with(TemporalAdjusters.lastDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "lastmonth" :
+                formatValue = localDate.plusWeeks(-1).with(TemporalAdjusters.firstDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(-1).with(TemporalAdjusters.lastDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "quarter" :
+                formatValue = quarterStart(0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + quarterStart(0).plusMonths(2).with(TemporalAdjusters.lastDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "lastquarter" :
+                formatValue = quarterStart(-1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + quarterStart(-1).plusMonths(2).with(TemporalAdjusters.lastDayOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                formatValue = "";
+                break;
+            case "halfyear" :
+                formatValue = localDate.plusMonths(-6).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "year" :
+                formatValue = localDate.plusYears(0).with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(0).with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            case "lastyear" :
+                formatValue = localDate.plusYears(-1).with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ","
+                        + localDate.plusWeeks(-1).with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                break;
+            default:
+                formatValue = value;
+                break;
+        }
+        return formatValue;
+    }
+
+    private static LocalDate quarterStart(int offset) {
+        final LocalDate date = LocalDate.now().plusMonths(offset * 3);
+        int month = date.getMonth().getValue();//当月
+        int start = 0;
+        if (month >= 1 && month <= 3) {//第一季度
+            start = 1;
+        } else if (month >= 4 && month <= 6) {//第二季度
+            start = 4;
+        } else if (month >= 7 && month <= 9) {//第三季度
+            start = 7;
+        } else if ((month >= 10 && month <= 12)) {//第四季度
+            start = 10;
+        } else if (month == 12) {//第四季度
+            start = 12;
+            month = 14;
+        }
+        return date.plusMonths(start - month).with(TemporalAdjusters.firstDayOfMonth());
+    }
 }

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

@@ -9,6 +9,9 @@ spring.datasource.url=jdbc:oracle:thin:@10.1.81.2:1521:orcl
 spring.datasource.username=UAS_DEV
 spring.datasource.password=select!#%*(
 
+spring.jackson.date-format=yyyy-MM-dd
+spring.jackson.time-zone=GMT+8
+
 #线上环境
 #spring.datasource.url=jdbc:oracle:thin:@218.18.115.198:1523:orcl
 #spring.datasource.username=BI_ADMIN

File diff suppressed because it is too large
+ 0 - 0
bi-server/src/main/webapp/dist/index.0e157b20.js


File diff suppressed because it is too large
+ 0 - 0
bi-server/src/main/webapp/dist/index.3f25d010.css


File diff suppressed because it is too large
+ 0 - 0
bi-server/src/main/webapp/dist/index.9af88545.js


File diff suppressed because it is too large
+ 0 - 0
bi-server/src/main/webapp/dist/index.9e336fcf.css


+ 2 - 2
bi-server/src/main/webapp/dist/index.html

@@ -4,8 +4,8 @@
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <title>BI 商业智能平台</title>
-<link rel="shortcut icon" href="favicon.png"><link href="index.9e336fcf.css" rel="stylesheet"></head>
+<link rel="shortcut icon" href="favicon.png"><link href="index.3f25d010.css" rel="stylesheet"></head>
 <body>
   <div id="root"></div>
-<script type="text/javascript" src="index.0e157b20.js"></script></body>
+<script type="text/javascript" src="index.9af88545.js"></script></body>
 </html>

Some files were not shown because too many files changed in this diff