From 26b1ca794d5680d17dc85719df4dbfadb38cd010 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 28 Jul 2026 15:15:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yfd/platform/config/SecurityConfig.java | 2 +- .../controller/MsOperationLogController.java | 46 +++++++ .../service/IMsOperationLogService.java | 25 +++- .../impl/MsOperationLogServiceImpl.java | 60 +++++++-- .../service/impl/MsWarnRuleBServiceImpl.java | 2 +- .../vd/service/impl/VdMonitorServiceImpl.java | 120 +++++++++++------- 6 files changed, 201 insertions(+), 54 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_base/controller/MsOperationLogController.java diff --git a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java index c0b79262..d9b7b014 100644 --- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java @@ -62,7 +62,7 @@ public class SecurityConfig { .requestMatchers("/system/user/auditUser").permitAll() .requestMatchers("/register/accessToken").permitAll() .requestMatchers("/sys/psbmodulelbb/**").permitAll() - + .requestMatchers("/base/operationLog/**").permitAll() // .requestMatchers("/eng/**").permitAll() // .requestMatchers("/eq/**").permitAll() // .requestMatchers("/env/**").permitAll() diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/MsOperationLogController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/MsOperationLogController.java new file mode 100644 index 00000000..b67062b8 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/MsOperationLogController.java @@ -0,0 +1,46 @@ +package com.yfd.platform.qgc_base.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_base.domain.MsOperationLog; +import com.yfd.platform.qgc_base.domain.MsOperationLogDetail; +import com.yfd.platform.qgc_base.service.IMsOperationLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 操作日志控制器 + */ +@Slf4j +@RestController +@RequestMapping("/base/operationLog") +@Tag(name = "操作日志管理") +public class MsOperationLogController { + + @Resource + private IMsOperationLogService msOperationLogService; + + @PostMapping("/GetKendoListCust") + @Operation(summary = "分页查询操作日志(tableName必传,recordId可选)") + public ResponseResult getKendoList(@RequestBody DataSourceRequest dataSourceRequest) { + Page page = msOperationLogService.queryPageList(dataSourceRequest); + return ResponseResult.successData(page); + } + + @GetMapping("/getDetailByMainId") + @Operation(summary = "根据日志主表ID查询日志详情") + public ResponseResult getDetailByMainId(@RequestParam("mainId") String mainId) { + if (StringUtils.isBlank(mainId)) { + return ResponseResult.error("mainId 不能为空"); + } + List list = msOperationLogService.getDetailByMainId(mainId); + return ResponseResult.successData(list); + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsOperationLogService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsOperationLogService.java index 7ee1af42..f22e59c7 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsOperationLogService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/IMsOperationLogService.java @@ -1,8 +1,15 @@ package com.yfd.platform.qgc_base.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.qgc_base.domain.MsOperationLog; +import com.yfd.platform.qgc_base.domain.MsOperationLogDetail; import com.yfd.platform.qgc_base.domain.SdEngInfoBH; -public interface IMsOperationLogService { +import java.util.List; + +public interface IMsOperationLogService extends IService { void recordEngAddLog(SdEngInfoBH engInfo, String source); @@ -58,4 +65,20 @@ public interface IMsOperationLogService { * @param 实体类型 */ void recordDeleteDetailLog(String recordId,String tableName, T entity, String source); + + /** + * 分页查询操作日志 + * + * @param request 请求参数(tableName 必传在 filter 中,recordId 可选) + * @return 分页结果 + */ + Page queryPageList(DataSourceRequest request); + + /** + * 根据日志主表ID查询日志详情 + * + * @param mainId 日志主表ID + * @return 日志详情列表 + */ + List getDetailByMainId(String mainId); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java index 8b705c51..09b53724 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java @@ -4,28 +4,28 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.qgc_base.domain.MsOperationLog; import com.yfd.platform.qgc_base.domain.MsOperationLogDetail; import com.yfd.platform.qgc_base.domain.SdEngInfoBH; import com.yfd.platform.qgc_base.mapper.MsOperationLogDetailMapper; import com.yfd.platform.qgc_base.mapper.MsOperationLogMapper; import com.yfd.platform.qgc_base.service.IMsOperationLogService; +import com.yfd.platform.utils.DataSourceRequestUtil; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; @Service -public class MsOperationLogServiceImpl implements IMsOperationLogService { +public class MsOperationLogServiceImpl extends ServiceImpl implements IMsOperationLogService { private static final String ENG_TABLE_NAME = "SD_ENGINFO_B_H"; @@ -685,4 +685,48 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService { } return builder.toString(); } + + @Override + public Page queryPageList(DataSourceRequest request) { + Page msOperationLogPage = DataSourceRequestUtil.executeQuery(request, MsOperationLog.class, this); + return msOperationLogPage; + } + + @Override + public List getDetailByMainId(String mainId) { + if (StringUtils.isBlank(mainId)) { + return new ArrayList<>(); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MsOperationLogDetail::getMainId, mainId); + return msOperationLogDetailMapper.selectList(wrapper); + } + + /** + * 从 DataSourceRequest 过滤条件中提取指定字段的值 + */ + private String getFilterFieldValue(DataSourceRequest request, String fieldName) { + if (request == null || request.getFilter() == null) { + return null; + } + return findFilterValue(request.getFilter(), fieldName); + } + + private String findFilterValue(DataSourceRequest.FilterDescriptor filter, String fieldName) { + if (filter == null) { + return null; + } + if (fieldName.equals(filter.getField()) && filter.getValue() != null) { + return filter.getValue().toString(); + } + if (filter.getFilters() != null) { + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String value = findFilterValue(child, fieldName); + if (value != null) { + return value; + } + } + } + return null; + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsWarnRuleBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsWarnRuleBServiceImpl.java index 52c17142..03ad2e4e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsWarnRuleBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsWarnRuleBServiceImpl.java @@ -387,7 +387,7 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl params = new HashMap<>(); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java index e9955d81..cff8f5a0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java @@ -843,52 +843,86 @@ public class VdMonitorServiceImpl implements VdMonitorService { "AND src.LGTD IS NOT NULL " + "AND src.LTTD IS NOT NULL "; } - private String buildRunDataCoreSql() { - return "SELECT " + - "run.ID AS id, " + - "run.STCD AS stcd, " + - "run.TM AS tm, " + - "NVL(run.FLNM, base.STNM || ' ' || TO_CHAR(run.TM, 'yyyy-mm-dd hh24')) AS flnm, " + - "run.IMG_PATH AS imgPath, " + - "run.FLPTH AS flpth, " + - "run.DEVICEINFO AS deviceinfo, " + - "run.DESCRIBE AS describe, " + - "run.FID AS fid, " + - "run.THUMBNAIL AS thumbnail, " + - "base.RSTCD AS rstcd, " + - "base.STNM AS stnm, " + - "eng.ENNM AS ennm, " + - "base.FHSTCD AS fhstcd, " + - "fh.STNM AS fhstnm, " + - "base.CSTCD AS stCode, " + - "cst.STNM AS stName, " + - "NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " + - "hb.BASENAME AS baseName, " + - "base.STTP AS sttpCode, " + - "sttp.STTP_NAME AS sttpName, " + - "base.STNM AS titleName, " + - "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + - "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " + - "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + - "NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " + - "NVL(eng.HBRVCD, base.HBRVCD) AS hbrvcd, " + - "hbrv.HBRVNM AS hbrvcdName " + - "FROM SD_VDINFO_R run " + - "INNER JOIN (" + buildVdDeviceBaseSql() + ") base ON run.STCD = base.STCD " + - "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = base.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + - "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + - " AND NVL(hb.IS_DELETED, 0) = 0 AND NVL(hb.ENABLED, 1) = 1 " + - "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eng.HBRVCD, base.HBRVCD) " + - " AND hbrv.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + - " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + - "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + - "LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = base.CSTCD " + - "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = base.STTP " + - " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " + - "WHERE NVL(run.IS_DELETED, 0) = 0 "; + return " SELECT\n" + + " a.ID,\n" + + " a.STCD,\n" + + " a.TM,\n" + + " b.stnm || ' ' || to_char(a.TM, 'yyyy-mm-dd hh24') AS FLNM,\n" + + " a.IMG_PATH,\n" + + " a.FLPTH,\n" + + " a.DEVICEINFO,\n" + + " a.DESCRIBE,\n" + + " a.FID,\n" + + " a.THUMBNAIL,\n" + + " b.RSTCD,\n" + + " b.stnm,\n" + + " b.ennm,\n" + + " b.FHSTCD,\n" + + " b.FHSTNM,\n" + + " b.STCODE AS stCode,\n" + + " b.STNAME AS stName,\n" + + " b.BASE_ID AS baseId,\n" + + " b.BASE_NAME AS baseName,\n" + + " b.sttp_code AS sttpCode,\n" + + " b.sttp_name AS sttpName,\n" + + " b.stnm AS titleName,\n" + + " b.basestepsort,\n" + + " b.rvcdstepsort,\n" + + " b.rstcdstepsort,\n" + + " b.hbrvcd,\n" + + " b.hbrvcd_name\n" + + " FROM SD_VDINFO_R a\n" + + " INNER JOIN V_MS_STBPRP_T b\n" + + " ON a.STCD = b.STCD\n" + + " AND b.IS_DELETED = 0"; } +// private String buildRunDataCoreSql() { +// return "SELECT " + +// "run.ID AS id, " + +// "run.STCD AS stcd, " + +// "run.TM AS tm, " + +// "NVL(run.FLNM, base.STNM || ' ' || TO_CHAR(run.TM, 'yyyy-mm-dd hh24')) AS flnm, " + +// "run.IMG_PATH AS imgPath, " + +// "run.FLPTH AS flpth, " + +// "run.DEVICEINFO AS deviceinfo, " + +// "run.DESCRIBE AS describe, " + +// "run.FID AS fid, " + +// "run.THUMBNAIL AS thumbnail, " + +// "base.RSTCD AS rstcd, " + +// "base.STNM AS stnm, " + +// "eng.ENNM AS ennm, " + +// "base.FHSTCD AS fhstcd, " + +// "fh.STNM AS fhstnm, " + +// "base.CSTCD AS stCode, " + +// "cst.STNM AS stName, " + +// "NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " + +// "hb.BASENAME AS baseName, " + +// "base.STTP AS sttpCode, " + +// "sttp.STTP_NAME AS sttpName, " + +// "base.STNM AS titleName, " + +// "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " + +// "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " + +// "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " + +// "NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " + +// "NVL(eng.HBRVCD, base.HBRVCD) AS hbrvcd, " + +// "hbrv.HBRVNM AS hbrvcdName " + +// "FROM SD_VDINFO_R run " + +// "INNER JOIN (" + buildVdDeviceBaseSql() + ") base ON run.STCD = base.STCD " + +// "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = base.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + +// "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + +// " AND NVL(hb.IS_DELETED, 0) = 0 AND NVL(hb.ENABLED, 1) = 1 " + +// "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eng.HBRVCD, base.HBRVCD) " + +// " AND hbrv.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " + +// " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + +// "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + +// "LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = base.CSTCD " + +// "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = base.STTP " + +// " AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " + +// "WHERE NVL(run.IS_DELETED, 0) = 0 "; +// } + private String buildLatestRunDataCoreSql() { return "SELECT " + "run.ID AS id, " +