fix: 优化逻辑
This commit is contained in:
parent
e68500343e
commit
2149d7c4e8
@ -32,4 +32,8 @@ public class MsOperationLog implements Serializable {
|
|||||||
|
|
||||||
@TableField("TABLE_NAME")
|
@TableField("TABLE_NAME")
|
||||||
private String tableName;
|
private String tableName;
|
||||||
|
|
||||||
|
@TableField("RECORD_ID")
|
||||||
|
private String recordId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -275,7 +275,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
|
|||||||
if (engInfo == null) {
|
if (engInfo == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildMainLog("新增电站", source);
|
MsOperationLog mainLog = buildMainLog(null,"新增电站", source);
|
||||||
msOperationLogMapper.insert(mainLog);
|
msOperationLogMapper.insert(mainLog);
|
||||||
|
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
@ -311,7 +311,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MsOperationLog mainLog = buildMainLog("修改电站", source);
|
MsOperationLog mainLog = buildMainLog(before.getStcd(),"修改电站", source);
|
||||||
msOperationLogMapper.insert(mainLog);
|
msOperationLogMapper.insert(mainLog);
|
||||||
|
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
@ -348,7 +348,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
|
|||||||
if (engInfo == null) {
|
if (engInfo == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildMainLog("删除电站", source);
|
MsOperationLog mainLog = buildMainLog(engInfo.getStcd(),"删除电站", source);
|
||||||
msOperationLogMapper.insert(mainLog);
|
msOperationLogMapper.insert(mainLog);
|
||||||
|
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
@ -378,11 +378,12 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
|
|||||||
batchInsertDetails(details);
|
batchInsertDetails(details);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MsOperationLog buildMainLog(String remark, String source) {
|
private MsOperationLog buildMainLog(String recordId,String remark, String source) {
|
||||||
MsOperationLog log = new MsOperationLog();
|
MsOperationLog log = new MsOperationLog();
|
||||||
log.setOperator(resolveOperator());
|
log.setOperator(resolveOperator());
|
||||||
log.setOperateTime(new Date());
|
log.setOperateTime(new Date());
|
||||||
log.setTableName(ENG_TABLE_NAME);
|
log.setTableName(ENG_TABLE_NAME);
|
||||||
|
log.setRecordId(recordId);
|
||||||
log.setSource(StrUtil.trimToNull(source));
|
log.setSource(StrUtil.trimToNull(source));
|
||||||
log.setRemark(remark);
|
log.setRemark(remark);
|
||||||
return log;
|
return log;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.wq.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.yfd.platform.common.*;
|
import com.yfd.platform.common.*;
|
||||||
@ -4071,7 +4072,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String buildWqHourLogSelectColumns() {
|
private String buildWqHourLogSelectColumns() {
|
||||||
return "STCD, TO_CHAR(TM, 'YYYY-MM-DD HH24:MI:SS') AS TM, " +
|
return "ID,STCD, TO_CHAR(TM, 'YYYY-MM-DD HH24:MI:SS') AS TM, " +
|
||||||
"WTMP, PH, DOX, CODMN, CODCR, BOD5, NH3N, TP, TN, CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, " +
|
"WTMP, PH, DOX, CODMN, CODCR, BOD5, NH3N, TP, TN, CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, " +
|
||||||
"VLPH, OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, FE, MN, AL, CHLA, CLARITY, TU, CYANO, " +
|
"VLPH, OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, FE, MN, AL, CHLA, CLARITY, TU, CYANO, " +
|
||||||
"WQGRD, SFDB, WQ_SFDBHN_YS";
|
"WQGRD, SFDB, WQ_SFDBHN_YS";
|
||||||
@ -4148,7 +4149,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
if (details.isEmpty()) {
|
if (details.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildWqMainLog("修改水质小时数据", source);
|
String recordId = ObjectUtil.isNotEmpty(beforeHour) && ObjectUtil.isNotEmpty(beforeHour.get("ID"))
|
||||||
|
? beforeHour.get("ID").toString()
|
||||||
|
: null; MsOperationLog mainLog = buildWqMainLog(recordId,"修改水质小时数据", source);
|
||||||
msOperationLogMapper.insert(mainLog);
|
msOperationLogMapper.insert(mainLog);
|
||||||
for (MsOperationLogDetail detail : details) {
|
for (MsOperationLogDetail detail : details) {
|
||||||
detail.setMainId(mainLog.getId());
|
detail.setMainId(mainLog.getId());
|
||||||
@ -4160,11 +4163,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
if (CollUtil.isEmpty(rows)) {
|
if (CollUtil.isEmpty(rows)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildWqMainLog(remark, source);
|
|
||||||
msOperationLogMapper.insert(mainLog);
|
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
for (Map<String, Object> row : rows) {
|
for (Map<String, Object> row : rows) {
|
||||||
String stcd = asString(row.get("STCD"));
|
String stcd = asString(row.get("STCD"));
|
||||||
|
String recordId = asString(row.get("ID"));
|
||||||
|
MsOperationLog mainLog = buildWqMainLog(recordId,remark, source);
|
||||||
|
msOperationLogMapper.insert(mainLog);
|
||||||
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
||||||
String fieldCode = entry.getKey();
|
String fieldCode = entry.getKey();
|
||||||
if (StrUtil.isBlank(fieldCode)) {
|
if (StrUtil.isBlank(fieldCode)) {
|
||||||
@ -4182,9 +4186,10 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
batchInsertWqLogDetails(details);
|
batchInsertWqLogDetails(details);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MsOperationLog buildWqMainLog(String remark, String source) {
|
private MsOperationLog buildWqMainLog(String recordId,String remark, String source) {
|
||||||
MsOperationLog log = new MsOperationLog();
|
MsOperationLog log = new MsOperationLog();
|
||||||
log.setOperator(resolveLogOperator());
|
log.setOperator(resolveLogOperator());
|
||||||
|
log.setRecordId(recordId);
|
||||||
log.setOperateTime(new Date());
|
log.setOperateTime(new Date());
|
||||||
log.setTableName(WQ_HOUR_TABLE_NAME);
|
log.setTableName(WQ_HOUR_TABLE_NAME);
|
||||||
log.setSource(StrUtil.trimToNull(source));
|
log.setSource(StrUtil.trimToNull(source));
|
||||||
|
|||||||
@ -1170,6 +1170,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String stcd = asString(getValueIgnoreCase(updateData, "stcd"));
|
String stcd = asString(getValueIgnoreCase(updateData, "stcd"));
|
||||||
|
String recordId = asString(getValueIgnoreCase(beforeRow, "id"));
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
for (Map.Entry<String, String> entry : WT_UPDATE_COLUMN_MAP.entrySet()) {
|
for (Map.Entry<String, String> entry : WT_UPDATE_COLUMN_MAP.entrySet()) {
|
||||||
if (!containsKeyIgnoreCase(updateData, entry.getKey())) {
|
if (!containsKeyIgnoreCase(updateData, entry.getKey())) {
|
||||||
@ -1188,7 +1189,7 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
|
|||||||
if (details.isEmpty()) {
|
if (details.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildWtMainLog("修改表层水温日数据", source);
|
MsOperationLog mainLog = buildWtMainLog(recordId,"修改表层水温日数据", source);
|
||||||
msOperationLogMapper.insert(mainLog);
|
msOperationLogMapper.insert(mainLog);
|
||||||
for (MsOperationLogDetail detail : details) {
|
for (MsOperationLogDetail detail : details) {
|
||||||
detail.setMainId(mainLog.getId());
|
detail.setMainId(mainLog.getId());
|
||||||
@ -1200,11 +1201,13 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
|
|||||||
if (CollUtil.isEmpty(rows)) {
|
if (CollUtil.isEmpty(rows)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MsOperationLog mainLog = buildWtMainLog(remark, source);
|
|
||||||
msOperationLogMapper.insert(mainLog);
|
|
||||||
List<MsOperationLogDetail> details = new ArrayList<>();
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
for (Map<String, Object> row : rows) {
|
for (Map<String, Object> row : rows) {
|
||||||
String stcd = asString(row.get("STCD"));
|
String stcd = asString(row.get("STCD"));
|
||||||
|
String recordId = asString(row.get("ID"));
|
||||||
|
MsOperationLog mainLog = buildWtMainLog(recordId,remark, source);
|
||||||
|
msOperationLogMapper.insert(mainLog);
|
||||||
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
||||||
String fieldCode = entry.getKey();
|
String fieldCode = entry.getKey();
|
||||||
Object oldValue = entry.getValue();
|
Object oldValue = entry.getValue();
|
||||||
@ -1219,10 +1222,12 @@ public class AlongDetailServiceImpl extends ServiceImpl<AlongDetailMapper, SdAlo
|
|||||||
batchInsertWtLogDetails(details);
|
batchInsertWtLogDetails(details);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MsOperationLog buildWtMainLog(String remark, String source) {
|
private MsOperationLog buildWtMainLog(String recordId,String remark, String source) {
|
||||||
MsOperationLog log = new MsOperationLog();
|
MsOperationLog log = new MsOperationLog();
|
||||||
log.setOperator(resolveWtLogOperator());
|
log.setOperator(resolveWtLogOperator());
|
||||||
log.setOperateTime(new Date());
|
log.setOperateTime(new Date());
|
||||||
|
log.setRecordId(recordId);
|
||||||
|
log.setTableName(WT_HOUR_TABLE_NAME);
|
||||||
log.setSource(StrUtil.trimToNull(source));
|
log.setSource(StrUtil.trimToNull(source));
|
||||||
log.setRemark(remark);
|
log.setRemark(remark);
|
||||||
return log;
|
return log;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.yfd.platform.qgc_env.zq.controller;
|
package com.yfd.platform.qgc_env.zq.controller;
|
||||||
|
|
||||||
|
import com.yfd.platform.annotation.Log;
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
import com.yfd.platform.config.ResponseResult;
|
import com.yfd.platform.config.ResponseResult;
|
||||||
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
|
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
|
||||||
@ -57,6 +58,7 @@ public class ZqMonitorController {
|
|||||||
return ResponseResult.successData(zqMonitorService.getRiverDrtpKendoListCust(dataSourceRequest));
|
return ResponseResult.successData(zqMonitorService.getRiverDrtpKendoListCust(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log(module = "水文流量站监测", value = "删除流量站小时/日/月数据")
|
||||||
@PostMapping("/river/removeKendoByIds")
|
@PostMapping("/river/removeKendoByIds")
|
||||||
@Operation(summary = "删除流量站小时/日/月数据")
|
@Operation(summary = "删除流量站小时/日/月数据")
|
||||||
public ResponseResult removeKendoByIds(@RequestBody BatchDeleteAo batchDeleteAo) {
|
public ResponseResult removeKendoByIds(@RequestBody BatchDeleteAo batchDeleteAo) {
|
||||||
@ -64,10 +66,14 @@ public class ZqMonitorController {
|
|||||||
return ResponseResult.success();
|
return ResponseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log(module = "水文流量站监测", value = "修改流量站小时数据")
|
||||||
@PostMapping("/river/updateRiverRData")
|
@PostMapping("/river/updateRiverRData")
|
||||||
@Operation(summary = "修改流量站小时数据")
|
@Operation(summary = "修改流量站小时数据")
|
||||||
public ResponseResult updateRiverRData(@RequestBody ZqOperateRequest zqOperateRequest) {
|
public ResponseResult updateRiverRData(@RequestBody ZqOperateRequest zqOperateRequest) {
|
||||||
zqMonitorService.updateRiverRData(zqOperateRequest.getUpdateData());
|
zqMonitorService.updateRiverRData(
|
||||||
|
zqOperateRequest == null ? null : zqOperateRequest.getUpdateData(),
|
||||||
|
zqOperateRequest == null ? null : zqOperateRequest.getSource()
|
||||||
|
);
|
||||||
return ResponseResult.success();
|
return ResponseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ public interface ZqMonitorService {
|
|||||||
|
|
||||||
boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
|
boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
|
||||||
|
|
||||||
boolean updateRiverRData(java.util.Map<String, Object> updateData);
|
boolean updateRiverRData(java.util.Map<String, Object> updateData, String source);
|
||||||
|
|
||||||
ZqBaseInfoVo getStcdInfo(String stcd);
|
ZqBaseInfoVo getStcdInfo(String stcd);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,8 +10,12 @@ import com.yfd.platform.common.GroupHelper;
|
|||||||
import com.yfd.platform.common.GroupingInfo;
|
import com.yfd.platform.common.GroupingInfo;
|
||||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||||
import com.yfd.platform.common.exception.BizException;
|
import com.yfd.platform.common.exception.BizException;
|
||||||
|
import com.yfd.platform.qgc_base.domain.MsOperationLog;
|
||||||
|
import com.yfd.platform.qgc_base.domain.MsOperationLogDetail;
|
||||||
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
|
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
|
||||||
import com.yfd.platform.qgc_base.entity.vo.DataParam;
|
import com.yfd.platform.qgc_base.entity.vo.DataParam;
|
||||||
|
import com.yfd.platform.qgc_base.mapper.MsOperationLogDetailMapper;
|
||||||
|
import com.yfd.platform.qgc_base.mapper.MsOperationLogMapper;
|
||||||
import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo;
|
import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo;
|
||||||
import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo;
|
import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo;
|
||||||
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo;
|
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo;
|
||||||
@ -19,23 +23,58 @@ import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDrtpDataVo;
|
|||||||
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo;
|
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo;
|
||||||
import com.yfd.platform.qgc_env.zq.service.ZqMonitorService;
|
import com.yfd.platform.qgc_env.zq.service.ZqMonitorService;
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
|
import com.yfd.platform.utils.SecurityUtils;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ZqMonitorServiceImpl implements ZqMonitorService {
|
public class ZqMonitorServiceImpl implements ZqMonitorService {
|
||||||
|
private static final String ZQ_HOUR_TABLE_NAME = "SD_RIVER_R";
|
||||||
|
private static final String ZQ_DAY_TABLE_NAME = "SD_RIVERDAY_S";
|
||||||
|
private static final String ZQ_MONTH_TABLE_NAME = "SD_RIVERDRTP_S";
|
||||||
|
private static final Map<String, String> ZQ_UPDATE_COLUMN_MAP = new LinkedHashMap<>();
|
||||||
|
private static final Map<String, String> ZQ_FIELD_MEANING_MAP = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
ZQ_UPDATE_COLUMN_MAP.put("z", "Z");
|
||||||
|
ZQ_UPDATE_COLUMN_MAP.put("q", "Q");
|
||||||
|
ZQ_UPDATE_COLUMN_MAP.put("v", "V");
|
||||||
|
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("ID", "主键ID");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("STCD", "站码");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("TM", "时间");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("DT", "时间");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("DRTP", "维度类型");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("YEAR", "年");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("MONTH", "月");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("DR", "时段类型");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("Z", "水位");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("Q", "流量");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("V", "流速");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("MSQMT", "测流方法");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("RECORD_USER", "创建人");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("RECORD_TIME", "创建时间");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("MODIFY_USER", "更新人");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("MODIFY_TIME", "更新时间");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("IS_DELETED", "是否已删除");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("DELETE_USER", "删除人");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("DELETE_TIME", "删除时间");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("FID", "附件ID");
|
||||||
|
ZQ_FIELD_MEANING_MAP.put("REMARK", "备注");
|
||||||
|
}
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||||
@ -43,6 +82,12 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
@Resource
|
@Resource
|
||||||
private JdbcTemplate jdbcTemplate;
|
private JdbcTemplate jdbcTemplate;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MsOperationLogMapper msOperationLogMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MsOperationLogDetailMapper msOperationLogDetailMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||||
return getMsstbprptListInternal(dataSourceRequest, false);
|
return getMsstbprptListInternal(dataSourceRequest, false);
|
||||||
@ -170,11 +215,14 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
}
|
}
|
||||||
String dataType = batchDeleteAo.getDataType();
|
String dataType = batchDeleteAo.getDataType();
|
||||||
List<DataParam> dataList = batchDeleteAo.getDataList();
|
List<DataParam> dataList = batchDeleteAo.getDataList();
|
||||||
|
String source = batchDeleteAo.getSource();
|
||||||
int batchSize = 500;
|
int batchSize = 500;
|
||||||
for (int i = 0; i < dataList.size(); i += batchSize) {
|
for (int i = 0; i < dataList.size(); i += batchSize) {
|
||||||
List<DataParam> subList = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
|
List<DataParam> subList = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
|
||||||
if ("TIME".equals(dataType)) {
|
if ("TIME".equals(dataType)) {
|
||||||
|
List<Map<String, Object>> beforeRows = queryRiverHourRows(subList);
|
||||||
deleteRiverRData(subList);
|
deleteRiverRData(subList);
|
||||||
|
recordRiverDeleteLog(beforeRows, ZQ_HOUR_TABLE_NAME, "删除流量站小时数据", source);
|
||||||
Map<String, String[]> dateRangeMap = new HashMap<>();
|
Map<String, String[]> dateRangeMap = new HashMap<>();
|
||||||
Map<String, String[]> monthRangeMap = new HashMap<>();
|
Map<String, String[]> monthRangeMap = new HashMap<>();
|
||||||
for (DataParam param : subList) {
|
for (DataParam param : subList) {
|
||||||
@ -209,10 +257,14 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ("DATE".equals(dataType)) {
|
if ("DATE".equals(dataType)) {
|
||||||
|
List<Map<String, Object>> beforeRows = queryRiverDayRows(subList);
|
||||||
deleteRiverDayData(subList);
|
deleteRiverDayData(subList);
|
||||||
|
recordRiverDeleteLog(beforeRows, ZQ_DAY_TABLE_NAME, "删除流量站日数据", source);
|
||||||
}
|
}
|
||||||
if ("MON".equals(dataType)) {
|
if ("MON".equals(dataType)) {
|
||||||
|
List<Map<String, Object>> beforeRows = queryRiverMonthRows(subList);
|
||||||
deleteRiverMonthData(subList);
|
deleteRiverMonthData(subList);
|
||||||
|
recordRiverDeleteLog(beforeRows, ZQ_MONTH_TABLE_NAME, "删除流量站月数据", source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -220,10 +272,12 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean updateRiverRData(Map<String, Object> updateData) {
|
public boolean updateRiverRData(Map<String, Object> updateData, String source) {
|
||||||
updateRiverHourData(updateData);
|
|
||||||
String stcd = updateData == null ? null : asString(updateData.get("stcd"));
|
String stcd = updateData == null ? null : asString(updateData.get("stcd"));
|
||||||
String tm = updateData == null ? null : asString(updateData.get("tm"));
|
String tm = updateData == null ? null : asString(updateData.get("tm"));
|
||||||
|
Map<String, Object> beforeRow = queryRiverHourRow(stcd, tm);
|
||||||
|
updateRiverHourData(updateData);
|
||||||
|
recordRiverUpdateLog(beforeRow, updateData, source);
|
||||||
if (StrUtil.isNotBlank(stcd) && StrUtil.isNotBlank(tm) && tm.length() >= 10) {
|
if (StrUtil.isNotBlank(stcd) && StrUtil.isNotBlank(tm) && tm.length() >= 10) {
|
||||||
String dateStr = tm.substring(0, 10);
|
String dateStr = tm.substring(0, 10);
|
||||||
statisticsDayDataFromHour(stcd, dateStr, dateStr);
|
statisticsDayDataFromHour(stcd, dateStr, dateStr);
|
||||||
@ -1612,6 +1666,273 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
return value == null ? null : String.valueOf(value);
|
return value == null ? null : String.valueOf(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> queryRiverHourRow(String stcd, String tm) {
|
||||||
|
if (StrUtil.isBlank(stcd) || StrUtil.isBlank(tm)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
String sql = "SELECT ID, STCD, TO_CHAR(TM, 'YYYY-MM-DD HH24:MI:SS') AS TM, Z, Q, V, MSQMT, RECORD_USER, " +
|
||||||
|
"RECORD_TIME, MODIFY_USER, MODIFY_TIME, IS_DELETED, DELETE_USER, DELETE_TIME, FID, REMARK " +
|
||||||
|
"FROM SD_RIVER_R WHERE STCD = ? AND TM = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')";
|
||||||
|
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, stcd, tm);
|
||||||
|
return rows.isEmpty() ? new HashMap<>() : normalizeRiverLogRow(rows.getFirst());
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> queryRiverHourRows(List<DataParam> dataList) {
|
||||||
|
if (CollUtil.isEmpty(dataList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT ID, STCD, TO_CHAR(TM, 'YYYY-MM-DD HH24:MI:SS') AS TM, Z, Q, V, MSQMT, RECORD_USER, ")
|
||||||
|
.append("RECORD_TIME, MODIFY_USER, MODIFY_TIME, IS_DELETED, DELETE_USER, DELETE_TIME, FID, REMARK ")
|
||||||
|
.append("FROM SD_RIVER_R WHERE ");
|
||||||
|
List<Object> args = new ArrayList<>();
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataParam item : dataList) {
|
||||||
|
if (item == null || StrUtil.isBlank(item.getId()) || StrUtil.isBlank(item.getTm())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
conditions.add("(STCD = ? AND TM = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'))");
|
||||||
|
args.add(item.getId());
|
||||||
|
args.add(item.getTm());
|
||||||
|
}
|
||||||
|
if (conditions.isEmpty()) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
sql.append(String.join(" OR ", conditions));
|
||||||
|
return normalizeRiverLogRows(jdbcTemplate.queryForList(sql.toString(), args.toArray()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> queryRiverDayRows(List<DataParam> dataList) {
|
||||||
|
if (CollUtil.isEmpty(dataList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT ID, STCD, TO_CHAR(DT, 'YYYY-MM-DD HH24:MI:SS') AS DT, Z, Q, V, MSQMT, RECORD_USER, ")
|
||||||
|
.append("RECORD_TIME, MODIFY_USER, MODIFY_TIME, IS_DELETED, DELETE_USER, DELETE_TIME ")
|
||||||
|
.append("FROM SD_RIVERDAY_S WHERE ");
|
||||||
|
List<Object> args = new ArrayList<>();
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataParam item : dataList) {
|
||||||
|
if (item == null || StrUtil.isBlank(item.getId()) || StrUtil.isBlank(item.getDt())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
conditions.add("(STCD = ? AND DT = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'))");
|
||||||
|
args.add(item.getId());
|
||||||
|
args.add(item.getDt());
|
||||||
|
}
|
||||||
|
if (conditions.isEmpty()) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
sql.append(String.join(" OR ", conditions));
|
||||||
|
return normalizeRiverLogRows(jdbcTemplate.queryForList(sql.toString(), args.toArray()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> queryRiverMonthRows(List<DataParam> dataList) {
|
||||||
|
if (CollUtil.isEmpty(dataList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT ID, STCD, TO_CHAR(TM, 'YYYY-MM-DD HH24:MI:SS') AS TM, DRTP, YEAR, MONTH, DR, Z, Q, V, MSQMT, ")
|
||||||
|
.append("RECORD_USER, RECORD_TIME, MODIFY_USER, MODIFY_TIME, IS_DELETED, DELETE_USER, DELETE_TIME ")
|
||||||
|
.append("FROM SD_RIVERDRTP_S WHERE ");
|
||||||
|
List<Object> args = new ArrayList<>();
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataParam item : dataList) {
|
||||||
|
if (item == null || StrUtil.isBlank(item.getId()) || StrUtil.isBlank(item.getDrtp())
|
||||||
|
|| StrUtil.isBlank(item.getYear()) || StrUtil.isBlank(item.getMonth())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
conditions.add("(STCD = ? AND DRTP = ? AND YEAR = ? AND MONTH = ?)");
|
||||||
|
args.add(item.getId());
|
||||||
|
args.add(item.getDrtp());
|
||||||
|
args.add(Integer.parseInt(item.getYear()));
|
||||||
|
args.add(Integer.parseInt(item.getMonth()));
|
||||||
|
}
|
||||||
|
if (conditions.isEmpty()) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
sql.append(String.join(" OR ", conditions));
|
||||||
|
return normalizeRiverLogRows(jdbcTemplate.queryForList(sql.toString(), args.toArray()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> normalizeRiverLogRows(List<Map<String, Object>> rows) {
|
||||||
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
|
if (CollUtil.isEmpty(rows)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
for (Map<String, Object> row : rows) {
|
||||||
|
result.add(normalizeRiverLogRow(row));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> normalizeRiverLogRow(Map<String, Object> row) {
|
||||||
|
Map<String, Object> normalized = new LinkedHashMap<>();
|
||||||
|
if (row == null || row.isEmpty()) {
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
||||||
|
normalized.put(entry.getKey() == null ? null : entry.getKey().toUpperCase(), entry.getValue());
|
||||||
|
}
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recordRiverUpdateLog(Map<String, Object> beforeRow, Map<String, Object> updateData, String source) {
|
||||||
|
if (updateData == null || updateData.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String stcd = asString(updateData.get("stcd"));
|
||||||
|
String recordId = asString(beforeRow.get("ID"));
|
||||||
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
|
for (Map.Entry<String, String> entry : ZQ_UPDATE_COLUMN_MAP.entrySet()) {
|
||||||
|
if (!containsKeyIgnoreCase(updateData, entry.getKey())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = entry.getValue();
|
||||||
|
Object oldValue = beforeRow == null ? null : beforeRow.get(column);
|
||||||
|
Object newValue = getValueIgnoreCase(updateData, entry.getKey());
|
||||||
|
if (StrUtil.equals(formatRiverLogValue(oldValue), formatRiverLogValue(newValue))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
details.add(buildRiverLogDetail(null, ZQ_HOUR_TABLE_NAME, stcd, column,
|
||||||
|
oldValue, resolveRiverDisplayValue(column, oldValue),
|
||||||
|
newValue, resolveRiverDisplayValue(column, newValue), "修改字段值"));
|
||||||
|
}
|
||||||
|
if (details.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
MsOperationLog mainLog = buildRiverMainLog(recordId,"修改流量站小时数据", source);
|
||||||
|
msOperationLogMapper.insert(mainLog);
|
||||||
|
for (MsOperationLogDetail detail : details) {
|
||||||
|
detail.setMainId(mainLog.getId());
|
||||||
|
}
|
||||||
|
batchInsertRiverLogDetails(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recordRiverDeleteLog(List<Map<String, Object>> rows, String tableName, String remark, String source) {
|
||||||
|
if (CollUtil.isEmpty(rows)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<MsOperationLogDetail> details = new ArrayList<>();
|
||||||
|
for (Map<String, Object> row : rows) {
|
||||||
|
String stcd = asString(row.get("STCD"));
|
||||||
|
String recordId = asString(row.get("ID"));
|
||||||
|
MsOperationLog mainLog = buildRiverMainLog(recordId,remark, source);
|
||||||
|
msOperationLogMapper.insert(mainLog);
|
||||||
|
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
||||||
|
String fieldCode = entry.getKey();
|
||||||
|
Object oldValue = entry.getValue();
|
||||||
|
if (StrUtil.isBlank(fieldCode) || oldValue == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
details.add(buildRiverLogDetail(mainLog.getId(), tableName, stcd, fieldCode,
|
||||||
|
oldValue, resolveRiverDisplayValue(fieldCode, oldValue),
|
||||||
|
null, null, "删除字段值"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
batchInsertRiverLogDetails(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MsOperationLog buildRiverMainLog(String recordId,String remark, String source) {
|
||||||
|
MsOperationLog log = new MsOperationLog();
|
||||||
|
log.setOperator(resolveRiverLogOperator());
|
||||||
|
log.setOperateTime(new Date());
|
||||||
|
log.setRecordId(recordId);
|
||||||
|
log.setTableName(ZQ_HOUR_TABLE_NAME);
|
||||||
|
log.setSource(StrUtil.trimToNull(source));
|
||||||
|
log.setRemark(remark);
|
||||||
|
return log;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MsOperationLogDetail buildRiverLogDetail(String mainId,
|
||||||
|
String tableName,
|
||||||
|
String stationCode,
|
||||||
|
String fieldCode,
|
||||||
|
Object oldValueCode,
|
||||||
|
Object oldValueName,
|
||||||
|
Object newValueCode,
|
||||||
|
Object newValueName,
|
||||||
|
String remark) {
|
||||||
|
MsOperationLogDetail detail = new MsOperationLogDetail();
|
||||||
|
detail.setMainId(mainId);
|
||||||
|
detail.setTableName(tableName);
|
||||||
|
detail.setStationCode(stationCode);
|
||||||
|
detail.setFieldCode(fieldCode);
|
||||||
|
detail.setFieldMeaning(ZQ_FIELD_MEANING_MAP.getOrDefault(fieldCode, fieldCode));
|
||||||
|
detail.setOldValueCode(formatRiverLogValue(oldValueCode));
|
||||||
|
detail.setOldValueName(formatRiverLogValue(oldValueName));
|
||||||
|
detail.setNewValueCode(formatRiverLogValue(newValueCode));
|
||||||
|
detail.setNewValueName(formatRiverLogValue(newValueName));
|
||||||
|
detail.setRemark(remark);
|
||||||
|
return detail;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void batchInsertRiverLogDetails(List<MsOperationLogDetail> details) {
|
||||||
|
if (CollUtil.isEmpty(details)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (MsOperationLogDetail detail : details) {
|
||||||
|
if (detail == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
msOperationLogDetailMapper.insert(detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object resolveRiverDisplayValue(String fieldCode, Object rawValue) {
|
||||||
|
return formatRiverLogValue(rawValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object getValueIgnoreCase(Map<String, Object> data, String key) {
|
||||||
|
if (data == null || StrUtil.isBlank(key)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (data.containsKey(key)) {
|
||||||
|
return data.get(key);
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||||
|
if (StrUtil.equalsIgnoreCase(entry.getKey(), key)) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean containsKeyIgnoreCase(Map<String, Object> data, String key) {
|
||||||
|
if (data == null || StrUtil.isBlank(key)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (data.containsKey(key)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (String mapKey : data.keySet()) {
|
||||||
|
if (StrUtil.equalsIgnoreCase(mapKey, key)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String resolveRiverLogOperator() {
|
||||||
|
try {
|
||||||
|
return SecurityUtils.getCurrentUsername();
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
try {
|
||||||
|
return SecurityUtils.getUserId();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatRiverLogValue(Object value) {
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (value instanceof Date date) {
|
||||||
|
return cn.hutool.core.date.DateUtil.formatDateTime(date);
|
||||||
|
}
|
||||||
|
return String.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
private void statisticsDayDataFromHour(String stcd, String startDate, String endDate) {
|
private void statisticsDayDataFromHour(String stcd, String startDate, String endDate) {
|
||||||
String deleteSql = "DELETE FROM SD_RIVERDAY_S T " +
|
String deleteSql = "DELETE FROM SD_RIVERDAY_S T " +
|
||||||
"WHERE T.STCD = ? " +
|
"WHERE T.STCD = ? " +
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user