目标监测:导出功能以及对应的预览
This commit is contained in:
parent
86913a00c8
commit
8d33aa536c
@ -2,6 +2,7 @@ package iet.ustb.sf.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import iet.ustb.sf.common.R;
|
||||
import iet.ustb.sf.domain.Monitor;
|
||||
import iet.ustb.sf.service.TargetDataService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -33,4 +35,18 @@ public class TargetDataController {
|
||||
return R.ok(targetDataService.getData(params, 1));
|
||||
}
|
||||
|
||||
@Operation(summary = "指标监控列表")
|
||||
@PostMapping("/getTargetMonitor")
|
||||
public R<List<Monitor>> getTargetMonitor(@RequestBody JSONObject params) {
|
||||
List<Monitor> monitorList = targetDataService.getTargetMonitor(params);
|
||||
return R.ok(monitorList);
|
||||
}
|
||||
|
||||
@Operation(summary = "导出预览")
|
||||
@PostMapping("/exportPreview")
|
||||
public R<Map<String, Object>> exportPreview(@RequestBody JSONObject params) {
|
||||
Map<String, Object> result = targetDataService.exportPreview(params);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,15 +2,19 @@ package iet.ustb.sf.mapper;
|
||||
|
||||
import iet.ustb.sf.domain.Monitor;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author hyy
|
||||
* @description 针对表【mbgk_monitor】的数据库操作Mapper
|
||||
* @createDate 2025-08-05 15:36:01
|
||||
* @Entity iet.ustb.sf.domain.Monitor
|
||||
*/
|
||||
* @author hyy
|
||||
* @description 针对表【mbgk_monitor】的数据库操作Mapper
|
||||
* @createDate 2025-08-05 15:36:01
|
||||
* @Entity iet.ustb.sf.domain.Monitor
|
||||
*/
|
||||
public interface MonitorMapper extends BaseMapper<Monitor> {
|
||||
|
||||
List<Monitor> getMbgkTargetMonitorsByTargetId(@Param("ids") List<String> ids);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,11 +1,13 @@
|
||||
package iet.ustb.sf.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import iet.ustb.sf.domain.Monitor;
|
||||
import iet.ustb.sf.domain.Target;
|
||||
import iet.ustb.sf.domain.TargetData;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -28,4 +30,8 @@ public interface TargetDataService extends IService<TargetData> {
|
||||
void saveTargetDate(Date date);
|
||||
|
||||
Map<String, Object> getData(JSONObject params, int type);
|
||||
|
||||
List<Monitor> getTargetMonitor(JSONObject params);
|
||||
|
||||
Map<String, Object> exportPreview(JSONObject params);
|
||||
}
|
||||
|
@ -1,12 +1,15 @@
|
||||
package iet.ustb.sf.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
||||
import iet.ustb.sf.domain.*;
|
||||
import iet.ustb.sf.exception.ErrorCode;
|
||||
import iet.ustb.sf.exception.MyException;
|
||||
import iet.ustb.sf.exception.ThrowUtils;
|
||||
import iet.ustb.sf.mapper.*;
|
||||
import iet.ustb.sf.service.TargetDataService;
|
||||
import iet.ustb.sf.service.UtilService;
|
||||
@ -18,6 +21,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
@ -26,6 +30,7 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author hyy
|
||||
@ -54,6 +59,9 @@ public class TargetDataServiceImpl extends ServiceImpl<TargetDataMapper, TargetD
|
||||
@Resource
|
||||
private JobLogMapper jobLogMapper;
|
||||
|
||||
@Resource
|
||||
private TableColumnMapper tableColumnMapper;
|
||||
|
||||
@Override
|
||||
@Scheduled(cron = "0 45 6 * * ?")
|
||||
public void saveTargetDate(Date date) {
|
||||
@ -215,6 +223,154 @@ public class TargetDataServiceImpl extends ServiceImpl<TargetDataMapper, TargetD
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Monitor> getTargetMonitor(JSONObject params) {
|
||||
Target target = JSON.toJavaObject(params, Target.class);
|
||||
String topic = target.getTopic();
|
||||
String organization = target.getOrganization();
|
||||
ThrowUtils.throwIf(
|
||||
StringUtils.isEmpty(topic) && StringUtils.isEmpty(organization),
|
||||
ErrorCode.PARAMS_ERROR,
|
||||
"主题和组织至少传入一个参数!"
|
||||
);
|
||||
String categoryId = target.getCategoryId();
|
||||
ThrowUtils.throwIf(
|
||||
!StringUtils.isEmpty(categoryId) && StringUtils.isEmpty(topic),
|
||||
ErrorCode.PARAMS_ERROR,
|
||||
"传入分类ID时主题必须传入!"
|
||||
);
|
||||
QueryWrapper<Target> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("is_key", 1);
|
||||
if (!StringUtils.isEmpty(topic)) {
|
||||
queryWrapper.eq("topic", topic);
|
||||
}
|
||||
if (!StringUtils.isEmpty(organization)) {
|
||||
queryWrapper.like("organization", "%" + organization + "%");
|
||||
}
|
||||
if (!StringUtils.isEmpty(categoryId)) {
|
||||
queryWrapper.eq("category_id", categoryId);
|
||||
}
|
||||
|
||||
if (!StringUtils.isEmpty(target.getName())) {
|
||||
queryWrapper.like("name", "%" + target.getName() + "%");
|
||||
}
|
||||
List<Target> targetList = targetMapper.selectList(queryWrapper);
|
||||
List<String> ids = new ArrayList<>();
|
||||
if (!StringUtils.isEmpty(target.getId())) {
|
||||
for (Target targetItem : targetList) {
|
||||
if (targetItem.getId().equals(target.getId()) ||
|
||||
(!StringUtils.isEmpty(targetItem.getParent()) && targetItem.getParent().equals(target.getId()))
|
||||
) {
|
||||
ids.add(targetItem.getId());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ids = targetList.stream().map(Target::getId).collect(Collectors.toList());
|
||||
}
|
||||
if (ids.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<Monitor> monitorList = monitorMapper.getMbgkTargetMonitorsByTargetId(ids);
|
||||
if (ids.size() == monitorList.size()) {
|
||||
return monitorList;
|
||||
}
|
||||
List<String> addIds = new ArrayList<>(ids);
|
||||
for (Monitor monitor : monitorList) {
|
||||
addIds.remove(monitor.getTargetId());
|
||||
}
|
||||
|
||||
Map<String, Target> targetMap = targetList.stream()
|
||||
.collect(Collectors.toMap(Target::getId, vo -> vo));
|
||||
Map<String, String[]> map = utilService.getCurrentCycleData(new Date());
|
||||
|
||||
for (String id : addIds) {
|
||||
Target target1 = targetMap.get(id);
|
||||
String[] strArr = map.get(target1.getCycle());
|
||||
|
||||
QueryWrapper<TargetData> qw = new QueryWrapper<>();
|
||||
qw.eq("target_id", id);
|
||||
qw.eq("x_show", strArr[0]);
|
||||
TargetData targetData = targetDataMapper.selectOne(qw);
|
||||
saveMonitor(targetData);
|
||||
}
|
||||
return monitorMapper.getMbgkTargetMonitorsByTargetId(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> exportPreview(JSONObject params) {
|
||||
String targetId = params.getString("targetId");
|
||||
CheckUtils.checkEmpty(targetId, "指标ID");
|
||||
Target target = targetMapper.selectById(targetId);
|
||||
ThrowUtils.throwIf(target == null, ErrorCode.PARAMS_ERROR, "指标不存在!");
|
||||
ThrowUtils.throwIf(target.getType() == 2, ErrorCode.OPERATION_ERROR, "聚合指标无法导出数据!");
|
||||
String type = params.getString("type");
|
||||
CheckUtils.checkEmpty(type, "类型");
|
||||
ThrowUtils.throwIf(
|
||||
!"total".equals(type) && !"page".equals(type),
|
||||
ErrorCode.PARAMS_ERROR,
|
||||
"类型传参异常!"
|
||||
);
|
||||
String start = params.getString("start");
|
||||
String end = params.getString("end");
|
||||
String[] strArr = utilService.getCurrentCycleDataByCycle(new Date(), target.getCycle());
|
||||
try {
|
||||
if (!StringUtils.isEmpty(start)) {
|
||||
LocalDate.parse(start);
|
||||
} else {
|
||||
start = strArr[3];
|
||||
}
|
||||
} catch (DateTimeParseException e) {
|
||||
throw new MyException(ErrorCode.PARAMS_ERROR, "开始日期格式不对!");
|
||||
}
|
||||
try {
|
||||
if (!StringUtils.isEmpty(end)) {
|
||||
end = LocalDate.parse(end).plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
} else {
|
||||
end = strArr[4];
|
||||
}
|
||||
} catch (DateTimeParseException e) {
|
||||
throw new MyException(ErrorCode.PARAMS_ERROR, "结束日期格式不对!");
|
||||
}
|
||||
String searchSql = target.getSearchSql();
|
||||
String[] columnNames = searchSql.substring(7, searchSql.indexOf("FROM") - 1).split(",");
|
||||
|
||||
QueryWrapper<TableColumn> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("table_name", target.getTableName());
|
||||
queryWrapper.in("column_name", Arrays.asList(columnNames));
|
||||
List<TableColumn> columnList = tableColumnMapper.selectList(queryWrapper);
|
||||
List<Map<String, String>> columns = columnList.stream()
|
||||
.map(col -> {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("prop", col.getColumnName());
|
||||
map.put("label", col.getColumnNameCn());
|
||||
return map;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, Object> map = new HashMap<>(5);
|
||||
map.put("columns", columns);
|
||||
if ("page".equals(type)) {
|
||||
String countSql = "SELECT COUNT(1) " + searchSql.substring(searchSql.indexOf("FROM"));
|
||||
long total = SqlRunner.db().selectCount(countSql, start, end);
|
||||
int pageIndex = Optional.ofNullable(params.getInteger("pageIndex")).orElse(1);
|
||||
int pageSize = Optional.ofNullable(params.getInteger("pageSize")).orElse(10);
|
||||
Page<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
|
||||
page.setTotal(total);
|
||||
long offset = (long) (pageIndex - 1) * pageSize;
|
||||
String sql = searchSql + " LIMIT " + pageSize + " OFFSET " + offset;
|
||||
Page<Map<String, Object>> data = SqlRunner.db().selectPage(page, sql, start, end);
|
||||
map.put("data", data);
|
||||
map.put("cnt", data.getRecords().size());
|
||||
} else {
|
||||
List<Map<String, Object>> data = SqlRunner.db().selectList(searchSql, start, end);
|
||||
map.put("data", data);
|
||||
map.put("cnt", data.size());
|
||||
}
|
||||
map.put("start", start.substring(0, 10));
|
||||
map.put("end", end.substring(0, 10));
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取列表中位数
|
||||
*
|
||||
|
@ -31,4 +31,21 @@
|
||||
val,warn_level,set_date,x_show,create_time,
|
||||
update_time,warn_type
|
||||
</sql>
|
||||
<select id="getMbgkTargetMonitorsByTargetId" resultType="iet.ustb.sf.domain.Monitor">
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT
|
||||
m.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY m.TARGET_ID
|
||||
ORDER BY m.X_SHOW DESC, m.WARN_LEVEL ASC
|
||||
) AS rn
|
||||
FROM mbgk_monitor m
|
||||
WHERE m.TARGET_ID IN
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
) subquery
|
||||
WHERE rn = 1
|
||||
</select>
|
||||
</mapper>
|
||||
|
Loading…
Reference in New Issue
Block a user