From 8d33aa536c2c9b26fc7b85b294293f98594d5501 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Tue, 12 Aug 2025 17:13:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=AE=E6=A0=87=E7=9B=91=E6=B5=8B=EF=BC=9A?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD=E4=BB=A5=E5=8F=8A=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sf/controller/TargetDataController.java | 16 ++ .../iet/ustb/sf/mapper/MonitorMapper.java | 14 +- .../ustb/sf/service/TargetDataService.java | 6 + .../service/impl/TargetDataServiceImpl.java | 156 ++++++++++++++++++ .../iet/ustb/sf/mapper/MonitorMapper.xml | 17 ++ 5 files changed, 204 insertions(+), 5 deletions(-) diff --git a/src/main/java/iet/ustb/sf/controller/TargetDataController.java b/src/main/java/iet/ustb/sf/controller/TargetDataController.java index 8ff1dd9..c233498 100644 --- a/src/main/java/iet/ustb/sf/controller/TargetDataController.java +++ b/src/main/java/iet/ustb/sf/controller/TargetDataController.java @@ -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> getTargetMonitor(@RequestBody JSONObject params) { + List monitorList = targetDataService.getTargetMonitor(params); + return R.ok(monitorList); + } + + @Operation(summary = "导出预览") + @PostMapping("/exportPreview") + public R> exportPreview(@RequestBody JSONObject params) { + Map result = targetDataService.exportPreview(params); + return R.ok(result); + } + } diff --git a/src/main/java/iet/ustb/sf/mapper/MonitorMapper.java b/src/main/java/iet/ustb/sf/mapper/MonitorMapper.java index 19187c4..a128485 100644 --- a/src/main/java/iet/ustb/sf/mapper/MonitorMapper.java +++ b/src/main/java/iet/ustb/sf/mapper/MonitorMapper.java @@ -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 { + List getMbgkTargetMonitorsByTargetId(@Param("ids") List ids); } diff --git a/src/main/java/iet/ustb/sf/service/TargetDataService.java b/src/main/java/iet/ustb/sf/service/TargetDataService.java index a996719..020eea2 100644 --- a/src/main/java/iet/ustb/sf/service/TargetDataService.java +++ b/src/main/java/iet/ustb/sf/service/TargetDataService.java @@ -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 { void saveTargetDate(Date date); Map getData(JSONObject params, int type); + + List getTargetMonitor(JSONObject params); + + Map exportPreview(JSONObject params); } diff --git a/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java b/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java index 13bc014..aff529b 100644 --- a/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java @@ -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 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 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 targetList = targetMapper.selectList(queryWrapper); + List 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 monitorList = monitorMapper.getMbgkTargetMonitorsByTargetId(ids); + if (ids.size() == monitorList.size()) { + return monitorList; + } + List addIds = new ArrayList<>(ids); + for (Monitor monitor : monitorList) { + addIds.remove(monitor.getTargetId()); + } + + Map targetMap = targetList.stream() + .collect(Collectors.toMap(Target::getId, vo -> vo)); + Map map = utilService.getCurrentCycleData(new Date()); + + for (String id : addIds) { + Target target1 = targetMap.get(id); + String[] strArr = map.get(target1.getCycle()); + + QueryWrapper 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 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 queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("table_name", target.getTableName()); + queryWrapper.in("column_name", Arrays.asList(columnNames)); + List columnList = tableColumnMapper.selectList(queryWrapper); + List> columns = columnList.stream() + .map(col -> { + Map map = new HashMap<>(); + map.put("prop", col.getColumnName()); + map.put("label", col.getColumnNameCn()); + return map; + }) + .collect(Collectors.toList()); + + Map 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> page = new Page<>(pageIndex, pageSize); + page.setTotal(total); + long offset = (long) (pageIndex - 1) * pageSize; + String sql = searchSql + " LIMIT " + pageSize + " OFFSET " + offset; + Page> data = SqlRunner.db().selectPage(page, sql, start, end); + map.put("data", data); + map.put("cnt", data.getRecords().size()); + } else { + List> 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; + } + /** * 获取列表中位数 * diff --git a/src/main/resources/iet/ustb/sf/mapper/MonitorMapper.xml b/src/main/resources/iet/ustb/sf/mapper/MonitorMapper.xml index 24f5179..c8f2844 100644 --- a/src/main/resources/iet/ustb/sf/mapper/MonitorMapper.xml +++ b/src/main/resources/iet/ustb/sf/mapper/MonitorMapper.xml @@ -31,4 +31,21 @@ val,warn_level,set_date,x_show,create_time, update_time,warn_type +