dashboard部分功能

修复bug
yun-zuoyi
yunhao.wang 6 years ago
parent e77af7ef7b
commit 10cc6b0b1d

@ -0,0 +1,80 @@
package cn.estsh.i3plus.core.api.iservice.busi;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* @Description : Dashboard
* @Reference :
* @Author : yunhao
* @CreateDate : 2018-12-14 15:41
* @Modify:
**/
public interface ISysDashboardService {
/**
*
* @return
*/
@ApiOperation(value = "查询组织个数")
long getSysOrganizeCount();
/**
*
* @return
*/
@ApiOperation(value = "获取部门数量")
long getSysDepartmentCount();
/**
*
* @return
*/
@ApiOperation(value = "查询用户登录日志",notes = "查询用户登录日志")
List findSysUserLoginLog();
/**
*
* @param size
* @return
*/
@ApiOperation(value = "查询操作日志",notes = "查询最近操作日志")
List findNewSysLogOperateSize(Integer size);
/**
*
* @param size
* @return
*/
@ApiOperation(value = "查询异常日志",notes = "查询最近异常日志")
List findNewSysLogExceptionSize(Integer size);
/**
*
* @param startTime
* @param endTime
* @return
*/
@ApiOperation(value = "查询系统日志",notes = "查询系统日志各级别占比")
Map findSysLogSystempByLevel(String startTime,String endTime);
/**
*
* @param startTime
* @param endTime
* @return
*/
@ApiOperation(value = "查询操作日志",notes = "查询平均响应耗时")
Map querySysLogSystemAvgExecuteTime(String startTime, String endTime);
/**
*
* @param startTime
* @param endTime
* @return
*/
@ApiOperation(value = "查询系统日志",notes = "查询各模块系统日志数量")
Map querySysLogSystemByLevel(String startTime, String endTime);
}

@ -31,13 +31,4 @@ public interface ISysLogSystemService {
@ApiOperation(value = "系统日志分页复杂查询",notes = "系统日志分页复杂查询")
ListPager querySysLogSystemByPager(SysLogSystem logSystem, Pager pager);
/**
*
* @param startTime
* @param endTime
* @return
*/
@ApiOperation(value = "查询时间段内平均请求耗时")
Map<String, Object> queryAvgExecuteTime(String startTime,String endTime);
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.core.api.iservice.busi.ISysDashboardService;
import cn.estsh.i3plus.platform.common.tool.SerializeTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
@ -11,6 +12,7 @@ import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -24,7 +26,7 @@ import java.util.HashMap;
import java.util.Map;
/**
* @Description :
* @Description : Dashboard
* @Reference :
* @Author : yunhao
* @CreateDate : 2018-12-10 17:04
@ -33,50 +35,50 @@ import java.util.Map;
@RestController
@Api(description = "Dashboard服务")
@RequestMapping(PlatformConstWords.BASE_URL + "/dashboard")
public class SysDashboardController {
public class SysDashboardController extends CoreBaseController {
@Autowired
private ISysUserService sysUserService;
@Autowired
private ISysOrganizeService sysOrganizeService;
@Autowired
private ISysDepartmentService sysDepartmentService;
@Autowired
private ISysMessageService sysMessageService;
@Autowired
private ISysLogOperateService sysLogOperateService;
@Autowired
private ISysLogSystemService sysLogSystemService;
// @Autowired
// private EurekaServerContext eurekaServerContext;
@Resource(name="redisRes")
private ImppRedis redisRes;
private ISysDashboardService sysDashboardService;
@Resource(name="redisCore")
private ImppRedis redisCore;
@Resource(name="imppSessionManager")
private DefaultWebSessionManager webSessionManager;
@GetMapping("/get")
@ApiOperation(value = "获取dashboard数据")
public ResultBean getDashboardData(){
try {
Map<String,Object> dashboardData = (Map<String, Object>) redisRes.getObject(PlatformConstWords.DASHBOARD_REDIS_KEY);
if(dashboardData == null){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Object ds = redisCore.getObject(PlatformConstWords.DASHBOARD_REDIS_KEY + new Date().getTime());
if(ds == null){
// 前10分钟的日期时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
String startTime = sdf.format(new Date());
cal.add(Calendar.MINUTE,10);
String endTime = sdf.format(cal.getTime());
String endTime = TimeTool.getNowTime(true);
cal.add(Calendar.MINUTE,-10);
String startTime = sdf.format(cal.getTime());
Map dashboardData = new HashMap<>();
dashboardData.put("orgNum", sysDashboardService.getSysOrganizeCount());
dashboardData.put("deptNum",sysDashboardService.getSysDepartmentCount());
dashboardData.put("onlineUser",webSessionManager.getSessionDAO().getActiveSessions().size());
dashboardData.put("logOperate",sysDashboardService.findNewSysLogOperateSize(10));
dashboardData.put("logException",sysDashboardService.findNewSysLogExceptionSize(10));
dashboardData.put("avgExecuteTime",sysDashboardService.querySysLogSystemAvgExecuteTime(startTime,endTime));
dashboardData.put("levelLogNum",sysDashboardService.querySysLogSystemByLevel(startTime,endTime));
dashboardData = new HashMap<>();
dashboardData.put("userNum",sysUserService.getSysUserCount());
dashboardData.put("orgNum",sysOrganizeService.getSysOrganizeCount());
dashboardData.put("deptNum",sysDepartmentService.getSysDepartmentCount());
dashboardData.put("logOperate",sysLogOperateService.findNewSysLogOperate(10));
dashboardData.put("",sysLogSystemService.queryAvgExecuteTime(startTime,endTime));
redisCore.putObject(PlatformConstWords.DASHBOARD_REDIS_KEY + new Date().getTime(),
SerializeTool.serialization(dashboardData),5);
redisRes.putHashMap(PlatformConstWords.DASHBOARD_REDIS_KEY,dashboardData,1000*60);
return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultMap(dashboardData);
}else{
return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultMap((Map<Object, Object>) SerializeTool.deserialization(ds.toString()));
}
return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(dashboardData);
} catch (
ImppBusiException busExcep) {
return ResultBean.fail(busExcep);

@ -1,9 +1,5 @@
package cn.estsh.i3plus.core.apiservice.dao;
import io.swagger.annotations.ApiOperation;
import org.bson.Document;
import java.util.List;
import java.util.Map;
/**
@ -15,14 +11,19 @@ import java.util.Map;
**/
public interface ISysLogSystemDao {
/**
*
* @param startTime
* @param endTime
* @return
*/
@ApiOperation(value = "查询时间段内平均请求耗时")
Map<String,Object> querySysLogOperateAvgExecuteTime(String startTime, String endTime);
Map<String,Object> querySysLogSystemAvgExecuteTime(String startTime, String endTime);
/**
*
* @param startTime
* @param endTime
* @return
*/
Map<String,Object> querySysLogSystemByLevel(String startTime, String endTime);
}

@ -1,18 +1,13 @@
package cn.estsh.i3plus.core.apiservice.daoimpl;
import cn.estsh.i3plus.core.apiservice.dao.ISysLogSystemDao;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysLogSystem;
import com.alibaba.fastjson.JSONObject;
import com.mongodb.Block;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCursor;
import io.swagger.annotations.ApiOperation;
import org.apache.jasper.tagplugins.jstl.core.ForEach;
import org.bson.Document;
import org.bson.json.JsonMode;
import org.bson.json.JsonWriterSettings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -20,6 +15,7 @@ import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -39,41 +35,22 @@ public class SysLogSystemDaoImpl implements ISysLogSystemDao {
private MongoDbFactory mongoDbFactory;
@Override
@ApiOperation(value = "查询时间段内平均请求耗时")
public Map<String, Object> querySysLogOperateAvgExecuteTime(String startTime, String endTime) {
List<String> dList = new ArrayList<>();
Block<Document> saveBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
dList.add(document.toJson());
}
};
public Map<String, Object> querySysLogSystemAvgExecuteTime(String startTime, String endTime) {
// 筛选
Document sub_match = new Document();
sub_match.put("leaveTime", new Document("$gte", startTime).append("$lte", endTime));
Document sub_substr = new Document();
sub_substr.put("$substr", new Object[]{"$createDatetime", 0, 16});
Document sub_project = new Document();
sub_project.put("new_time_stamp", sub_substr);
sub_project.put("executeTime", 1);
sub_match.put("createDatetime", new Document("$gte", startTime).append("$lte", endTime));
// 分组
Document sub_group = new Document();
sub_group.put("_id", "createDatetime");
sub_group.put("_id", "$createDatetime");
sub_group.put("avg", new Document("$avg", "$executeTime"));
Document match = new Document("$match", sub_match);
Document project = new Document("$project", sub_project);
Document group = new Document("$group", sub_group);
Document sort = new Document("$sort", new Document("_id", 1));
Document sort = new Document("$sort", new Document("_id", -1));
List<Document> aggregateList = new ArrayList<>();
aggregateList.add(match);
// aggregateList.add(project);
aggregateList.add(group);
aggregateList.add(sort);
@ -81,26 +58,44 @@ public class SysLogSystemDaoImpl implements ISysLogSystemDao {
.getCollection(StringTool.toLowerCaseFirstOne(SysLogSystem.class.getSimpleName()))
.aggregate(aggregateList);
MongoCursor<Document> cursor = findIter.iterator();
Map resultData = new HashMap();
while (cursor.hasNext()) {
Document item_doc = cursor.next();
int _id = item_doc.getInteger("_id", 0);
int avg = item_doc.getInteger("avg", 0);
System.out.println("_id" + _id + "abg" + avg);
resultData.put(item_doc.getString("_id"),MathOperation.round(item_doc.getDouble("avg"),0));
}
return packObjectListFromDocument(dList);
return resultData;
}
@Override
public Map<String,Object> querySysLogSystemByLevel(String startTime, String endTime){
// 筛选
Document sub_match = new Document();
sub_match.put("createDatetime", new Document("$gte", startTime).append("$lte", endTime));
// 分组
Document sub_group = new Document();
sub_group.put("_id", "$logLevel");
sub_group.put("count", new Document("$sum", 1));
Document match = new Document("$match", sub_match);
Document group = new Document("$group", sub_group);
private Map<String, Object> packObjectListFromDocument(List<String> dList) {
//将获取的document转为对象
List<SysLogOperate> resultList = new ArrayList<>();
// 设置为宽松模式
JsonWriterSettings jsonWriterSettings = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
for (String d : dList) {
resultList.add(JSONObject.parseObject(d, SysLogOperate.class));
List<Document> aggregateList = new ArrayList<>();
aggregateList.add(match);
aggregateList.add(group);
AggregateIterable<Document> findIter = mongoDbFactory.getDb()
.getCollection(StringTool.toLowerCaseFirstOne(SysLogSystem.class.getSimpleName()))
.aggregate(aggregateList);
MongoCursor<Document> cursor = findIter.iterator();
Map resultData = new HashMap();
while (cursor.hasNext()) {
Document item_doc = cursor.next();
resultData.put(ImppEnumUtil.LOG_LEVEL.valueOfName(item_doc.getInteger("_id")),MathOperation.round(item_doc.getInteger("count"),0));
}
return null;
return resultData;
}
}

@ -0,0 +1,107 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysDashboardService;
import cn.estsh.i3plus.core.apiservice.dao.ISysLogSystemDao;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate;
import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysLogUserLoginRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysOrganizeRepository;
import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogExceptionRepository;
import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogOperateRepository;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Reference :
* @Author : yunhao
* @CreateDate : 2018-12-15 15:26
* @Modify:
**/
@Service
public class SysDashboardService implements ISysDashboardService {
public static final Logger LOGGER = LoggerFactory.getLogger(SysConfigService.class);
@Autowired
private SysOrganizeRepository sysOrganizeRDao;
@Autowired
private SysDepartmentRepository sysDepartmentRDao;
@Autowired
private SysLogOperateRepository sysLogOperateRDao;
@Autowired
private SysLogExceptionRepository sysLogExceptionRDao;
@Autowired
private ISysLogSystemDao sysLogSystemDao;
@Override
@ApiOperation(value = "查询组织个数")
public long getSysOrganizeCount() {
return sysOrganizeRDao.listCount();
}
@Override
@ApiOperation(value = "获取部门数量")
public long getSysDepartmentCount() {
return sysDepartmentRDao.listCount();
}
@Override
@ApiOperation(value = "查询用户登录日志",notes = "查询用户登录日志")
public List findSysUserLoginLog() {
return null;
}
@Override
@ApiOperation(value = "查询操作日志",notes = "查询最新的几条操作日志")
public List findNewSysLogOperateSize(Integer size) {
Pager page = new Pager();
page.setCurrentPage(1);
page.setPageSize(size);
SysLogOperate sysLogOperate = new SysLogOperate();
sysLogOperate.setOrderByParam("createDatetime");
sysLogOperate.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue());
return sysLogOperateRDao.findByBsonPager(null,page,sysLogOperate.getOrderByParam(),sysLogOperate.getAscOrDesc());
}
@Override
@ApiOperation(value = "查询操异常日志",notes = "查询最新的几条异常日志")
public List findNewSysLogExceptionSize(Integer size) {
Pager page = new Pager();
page.setCurrentPage(1);
page.setPageSize(size);
SysLogOperate sysLogOperate = new SysLogOperate();
sysLogOperate.setOrderByParam("createDatetime");
sysLogOperate.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue());
return sysLogExceptionRDao.findByBsonPager(null,page,sysLogOperate.getOrderByParam(),sysLogOperate.getAscOrDesc());
}
@Override
@ApiOperation(value = "查询系统日志",notes = "查询系统日志各级别占比")
public Map findSysLogSystempByLevel(String startTime, String endTime) {
return null;
}
@Override
@ApiOperation(value = "查询系统日志",notes = "查询系统日志平均执行时间")
public Map querySysLogSystemAvgExecuteTime(String startTime, String endTime) {
return sysLogSystemDao.querySysLogSystemAvgExecuteTime(startTime,endTime);
}
@Override
@ApiOperation(value = "查询系统日志",notes = "查询各模块系统日志数量")
public Map querySysLogSystemByLevel(String startTime, String endTime) {
return sysLogSystemDao.querySysLogSystemByLevel(startTime,endTime);
}
}

@ -32,8 +32,6 @@ public class SysLogSystemService implements ISysLogSystemService {
@Autowired
private SysLogSystemRepository logSystemRDao;
@Autowired
private ISysLogSystemDao sysLogSystemDao;
@Override
@ApiOperation(value = "添加系统日志",notes = "添加系统日志")
@ -72,9 +70,4 @@ public class SysLogSystemService implements ISysLogSystemService {
,logSystem.getAscOrDesc()),pager);
}
}
@Override
public Map<String, Object> queryAvgExecuteTime(String startTime, String endTime) {
return sysLogSystemDao.querySysLogOperateAvgExecuteTime(startTime,endTime);
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysTool;
import cn.estsh.i3plus.pojo.platform.bean.SysToolType;
import cn.estsh.i3plus.pojo.platform.repository.SysToolRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysToolTypeRepository;
@ -100,12 +101,12 @@ public class SysToolTypeService implements ISysToolTypeService {
@ApiOperation(value = "删除硬件类型",notes = "根据 ID 批量删除硬件类型信息")
public void deleteSysToolTypeByIds(Long[] ids) {
LOGGER.info("硬件类型 TOOL_TYPE ids:{}", ids.toString());
long count = toolRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("toolTypeId",ids));
if(count >= 1){
List<SysTool> count = toolRDao.findByHqlWhere(CoreHqlPack.packHqlIds("toolTypeId",ids));
if(count.size() > 0){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("存在关联硬件无法删除!")
.setErrorDetail(count.get(0).getToolTypeNameRdd() + " - 存在关联硬件无法删除!")
.setErrorSolution("请重新操作")
.build();
}else {

Loading…
Cancel
Save