fix: 优化操作日志查询

This commit is contained in:
tangwei 2026-07-28 15:15:04 +08:00
parent 56305b8f89
commit 26b1ca794d
6 changed files with 201 additions and 54 deletions

View File

@ -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()

View File

@ -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<MsOperationLog> 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<MsOperationLogDetail> list = msOperationLogService.getDetailByMainId(mainId);
return ResponseResult.successData(list);
}
}

View File

@ -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<MsOperationLog> {
void recordEngAddLog(SdEngInfoBH engInfo, String source);
@ -58,4 +65,20 @@ public interface IMsOperationLogService {
* @param <T> 实体类型
*/
<T> void recordDeleteDetailLog(String recordId,String tableName, T entity, String source);
/**
* 分页查询操作日志
*
* @param request 请求参数tableName 必传在 filter recordId 可选
* @return 分页结果
*/
Page<MsOperationLog> queryPageList(DataSourceRequest request);
/**
* 根据日志主表ID查询日志详情
*
* @param mainId 日志主表ID
* @return 日志详情列表
*/
List<MsOperationLogDetail> getDetailByMainId(String mainId);
}

View File

@ -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<MsOperationLogMapper, MsOperationLog> 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<MsOperationLog> queryPageList(DataSourceRequest request) {
Page<MsOperationLog> msOperationLogPage = DataSourceRequestUtil.executeQuery(request, MsOperationLog.class, this);
return msOperationLogPage;
}
@Override
public List<MsOperationLogDetail> getDetailByMainId(String mainId) {
if (StringUtils.isBlank(mainId)) {
return new ArrayList<>();
}
LambdaQueryWrapper<MsOperationLogDetail> 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;
}
}

View File

@ -387,7 +387,7 @@ public class MsWarnRuleBServiceImpl extends ServiceImpl<MsWarnRuleBMapper, MsWar
.append("FROM MS_WARN_RULE_STBPRP_B t1\n")
.append("INNER JOIN MS_WARN_RULE_B t2 ON t1.RULE_ID = t2.ID\n")
.append("INNER JOIN V_MS_STBPRP_T t3 ON t1.STCD = t3.STCD\n")
.append("WHERE t2.RULE_CODE IN ('common','custom')\n")
.append("WHERE t2.RULE_CODE IN ('common','custom') AND t2.IS_DELETED=0 AND t3.IS_DELETED=0 AND t1.IS_DELETED=0 ORDER BY t1.RECORD_TIME DESC \n")
.append(") WHERE 1=1");
Map<String, Object> params = new HashMap<>();

View File

@ -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, " +