diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdOpinfoBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdOpinfoBH.java index dff3466c..b71e9983 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdOpinfoBH.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdOpinfoBH.java @@ -2,6 +2,8 @@ package com.yfd.platform.qgc_base.domain; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; +import com.yfd.platform.annotation.UserIdField; +import com.yfd.platform.annotation.UserNameField; import lombok.Data; import java.io.Serializable; @@ -63,6 +65,9 @@ public class SdOpinfoBH implements Serializable { private String hbrvcd; + @TableField(exist = false) + private String hbrvcdName; + private String rvcd; @TableField(exist = false) @@ -195,9 +200,6 @@ public class SdOpinfoBH implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date vlsrTm; - @TableField("RECORD_USER") - private String recordUser; - @TableField("RECORD_TIME") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date recordTime; @@ -226,4 +228,14 @@ public class SdOpinfoBH implements Serializable { /** 所属站类层级(非数据库字段) */ @TableField(exist = false) private Integer sttpTreeLevel; + + /** 创建人 */ + @TableField("RECORD_USER") + @UserIdField + private String recordUser; + + /** 创建人名称(非数据库字段) */ + @TableField(exist = false) + @UserNameField + private String recordUserName; } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java index 6d431473..e5599d34 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java @@ -1,5 +1,6 @@ package com.yfd.platform.qgc_base.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceRequest; @@ -64,6 +65,10 @@ public class SdVdinfoBServiceImpl extends ServiceImpl基于 SD_OPINFO_B_H 表,管理 STTP = 'OSGB' 的倾斜摄影数据

* * @author migration */ @@ -25,37 +27,40 @@ public class MsObliqueImageBController { @Resource private IMsObliqueImageBService msObliqueImageBService; + @Resource + private UserNameFillHelper userNameFillHelper; + /** * 条件过滤数据列表 */ @Operation(summary = "条件过滤数据列表") @PostMapping("/GetKendoListCust") public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { - DataSourceResult result = msObliqueImageBService.getKendoList(dataSourceRequest); + DataSourceResult result = msObliqueImageBService.getKendoList(dataSourceRequest); + userNameFillHelper.fillUserNames(result.getData()); return ResponseResult.successData(result); } - /** * 新增或修改 */ @Operation(summary = "新增或修改") @PostMapping("/addOrUpdate") - public ResponseResult addOrUpdate(@RequestBody MsObliqueImageB msObliqueImageB) { - msObliqueImageBService.addOrUpdate(msObliqueImageB); + public ResponseResult addOrUpdate(@RequestBody SdOpinfoBH entity) { + msObliqueImageBService.addOrUpdate(entity); return ResponseResult.success(); } /** - * 删除 + * 逻辑删除(id 即 stcd) */ @Operation(summary = "删除") @GetMapping("/delete") - public ResponseResult delete(@RequestParam("id") String id) { - if (StrUtil.isBlank(id)) { + public ResponseResult delete(@RequestParam("stcd") String stcd) { + if (StrUtil.isBlank(stcd)) { throw new BizException("ID不能为空"); } - msObliqueImageBService.delete(id); + msObliqueImageBService.delete(stcd); return ResponseResult.success(); } -} \ No newline at end of file +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/domain/MsObliqueImageB.java b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/domain/MsObliqueImageB.java deleted file mode 100644 index 9c545c74..00000000 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/domain/MsObliqueImageB.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.yfd.platform.qgc_sys.obliqueImage.domain; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - -/** - * 倾斜摄影管理实体类 - * - * @author migration - */ -@Data -@TableName("MS_OBL_PHOTO") -@Schema(description = "倾斜摄影管理实体类") -public class MsObliqueImageB implements Serializable { - - private static final long serialVersionUID = 1L; - - @TableId(type = IdType.ASSIGN_UUID) - private String id; - - /** 站码 */ - @TableField("STCD") - private String stcd; - - /** 站名 */ - @TableField("STNM") - private String stnm; - - /** 所属站类ID */ - @TableField("STTP") - private String sttp; - - /** 所属站类编码 */ - @TableField("STTP_CODE") - private String sttpCode; - - /** 所属站类名称 */ - @TableField("STTP_NAME") - private String sttpName; - - /** 所属站类全路径(非数据库字段) */ - @TableField(exist = false) - private String sttpFullPath; - - /** 所属站类层级(非数据库字段) */ - @TableField(exist = false) - private Integer sttpTreeLevel; - - /** 所属水电基地编码 */ - @TableField("BASE_ID") - private String baseId; - - /** 所属水电基地名称 */ - @TableField("BASE_NAME") - private String baseName; - - /** 所属流域编码 */ - @TableField("HBRVCD") - private String hbrvcd; - - /** 所属流域名称 */ - @TableField("HBRVCD_NAME") - private String hbrvcdName; - - /** 所属河段编码(非数据库字段,与HBRVCD同源) */ - @TableField(exist = false) - private String rvcd; - - /** 所属河段名称(非数据库字段,与HBRVCD_NAME同源) */ - @TableField(exist = false) - private String rvcdName; - - /** 在线地址 */ - @TableField("URL") - private String url; - - /** 所属电站编码 */ - @TableField("RSTCD") - private String rstcd; - - /** 所属电站名称 */ - @TableField("ENNM") - private String ennm; - - /** 电站经度(非数据库字段) */ - @TableField("LGTD") - private BigDecimal lgtd; - - /** 电站纬度(非数据库字段) */ - @TableField("LTTD") - private BigDecimal lttd; - - /** 电站坐标JSON串 */ - @TableField("LOCATION") - private String location; - - /** 模型精度 */ - @TableField("ACCURACY") - private Integer accuracy; - - /** 边界范围 */ - @TableField("BOUNDARY") - private String boundary; - - /** 自定义高程 */ - @TableField("HEIGHT") - private Integer height; - - /** 备注 */ - @TableField("COMMENTS") - private String comments; - - /** 创建人 */ - @TableField("RECORD_USER") - private String recordUser; - - /** 创建人名称(非数据库字段) */ - @TableField(exist = false) - private String recordUserName; - - /** 创建时间(非数据库字段) */ - @TableField(exist = false) - private Date recordTime; - - /** 更新人 */ - @TableField("MODIFY_USER") - private String modifyUser; - - /** 更新时间 */ - @TableField("MODIFY_TIME") - private Date modifyTime; - - /** 是否已删除:0=未删除 1=已删除 */ - @TableField("IS_DELETED") - private Integer isDeleted; - - /** 删除人 */ - @TableField("DELETE_USER") - private String deleteUser; - - /** 删除时间 */ - @TableField("DELETE_TIME") - private Date deleteTime; -} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/mapper/MsObliqueImageBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/mapper/MsObliqueImageBMapper.java index 7e527915..8629be31 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/mapper/MsObliqueImageBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/mapper/MsObliqueImageBMapper.java @@ -1,11 +1,8 @@ package com.yfd.platform.qgc_sys.obliqueImage.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.yfd.platform.qgc_sys.obliqueImage.domain.MsObliqueImageB; +import com.yfd.platform.qgc_base.domain.SdOpinfoBH; import org.apache.ibatis.annotations.Mapper; - -import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; /** @@ -14,11 +11,8 @@ import org.apache.ibatis.annotations.Select; * @author migration */ @Mapper -public interface MsObliqueImageBMapper extends BaseMapper { +public interface MsObliqueImageBMapper extends BaseMapper { - @Delete("DELETE FROM MS_OBL_PHOTO WHERE ID = #{id}") - void deleteById(@Param("id") String id); - - @Select("SELECT ID FROM SD_STTP_B WHERE STTP_CODE = 'OSGB'") - String getSttp(); -} \ No newline at end of file + @Select("SELECT STTP_CODE FROM SD_STTP_B WHERE STTP_CODE = 'OSGB' AND NVL(IS_DELETED, 0) = 0") + String getOpgbSttpId(); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/IMsObliqueImageBService.java b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/IMsObliqueImageBService.java index 9f95d550..90490722 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/IMsObliqueImageBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/IMsObliqueImageBService.java @@ -3,34 +3,27 @@ package com.yfd.platform.qgc_sys.obliqueImage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.qgc_sys.obliqueImage.domain.MsObliqueImageB; +import com.yfd.platform.qgc_base.domain.SdOpinfoBH; /** * 倾斜摄影管理 Service 接口 * * @author migration */ -public interface IMsObliqueImageBService extends IService { +public interface IMsObliqueImageBService extends IService { /** * 条件过滤数据列表(Kendo 数据源) - * - * @param dataSourceRequest 数据源请求 - * @return 数据源结果 */ - DataSourceResult getKendoList(DataSourceRequest dataSourceRequest); + DataSourceResult getKendoList(DataSourceRequest dataSourceRequest); /** * 新增或修改 - * - * @param msObliqueImageB 倾斜摄影实体 */ - void addOrUpdate(MsObliqueImageB msObliqueImageB); + void addOrUpdate(SdOpinfoBH entity); /** - * 删除 - * - * @param id 主键ID + * 逻辑删除 */ - void delete(String id); -} \ No newline at end of file + void delete(String stcd); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/impl/MsObliqueImageBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/impl/MsObliqueImageBServiceImpl.java index a5686be2..a57bc793 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/impl/MsObliqueImageBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/obliqueImage/service/impl/MsObliqueImageBServiceImpl.java @@ -1,38 +1,37 @@ package com.yfd.platform.qgc_sys.obliqueImage.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.exception.BizException; import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import com.yfd.platform.qgc_base.domain.SdOpinfoBH; import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; -import com.yfd.platform.qgc_sys.obliqueImage.domain.MsObliqueImageB; import com.yfd.platform.qgc_sys.obliqueImage.mapper.MsObliqueImageBMapper; import com.yfd.platform.qgc_sys.obliqueImage.service.IMsObliqueImageBService; -import com.yfd.platform.utils.DataSourceRequestUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil; -import com.yfd.platform.utils.QueryWrapperUtil; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; -import lombok.Data; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; +import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 倾斜摄影管理 Service 实现类 + *

基于 SD_OPINFO_B_H 表,STTP = 'OSGB' 的数据

* * @author migration */ @Service -public class MsObliqueImageBServiceImpl extends ServiceImpl implements IMsObliqueImageBService { +public class MsObliqueImageBServiceImpl extends ServiceImpl implements IMsObliqueImageBService { @Resource private MsObliqueImageBMapper msObliqueImageBMapper; @@ -40,132 +39,213 @@ public class MsObliqueImageBServiceImpl extends ServiceImpl getKendoList(DataSourceRequest dataSourceRequest) { - // 1. 构建查询条件 + public DataSourceResult getKendoList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); - QueryWrapper wrapper = DataSourceRequestUtil.buildQueryWrapper( - dataSourceRequest, MsObliqueImageB.class); + String osgbSttpId = msObliqueImageBMapper.getOpgbSttpId(); + if (StrUtil.isBlank(osgbSttpId)) { + DataSourceResult empty = new DataSourceResult<>(); + empty.setData(Collections.emptyList()); + empty.setTotal(0L); + return empty; + } - // 固定条件:STTP_CODE = 'OSGB' AND IS_DELETED = 0 AND RSTCD IS NOT NULL - wrapper.eq("STTP_CODE", "OSGB"); - wrapper.eq("IS_DELETED", 0); - wrapper.isNotNull("RSTCD"); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT a.STCD, a.STNM, a.STTP, a.LGTD, a.LTTD, a.ELEV, a.STLC, ") + .append("a.USFL, a.DTIN, a.ORDER_INDEX, a.RSTCD, a.BASE_ID, ") + .append("a.HBRVCD, a.RVCD, a.ADDVCD, a.URL, a.HEIGHT, a.BOUNDARY, ") + .append("a.LOCATION, a.ACCURACY, a.REMARK, a.RECORD_USER,a.RECORD_TIME, ") + .append("a.MODIFY_USER, a.MODIFY_TIME, a.IS_DELETED, ") + .append("eng.ENNM, eng.LGTD AS engLgtd, eng.LTTD AS engLttd, ") + .append("eng.BASE_ID AS engBaseId, eng.BASE_NAME, ") + .append("vsrd.RVNM AS hbrvcdName ") + .append("FROM SD_OPINFO_B_H a ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = a.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON a.HBRVCD = hbrv.HBRVCD AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN V_SD_RVCD_DIC_TREE vsrd ON eng.REACHCD = vsrd.RVCD AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append("WHERE a.IS_DELETED = 0 ") + .append("AND a.STTP = '").append(osgbSttpId).append("' "); - // 旧系统 rvcd 字段映射到 HBRVCD 列(前端传参保持 rvcd 不变) - if (loadOptions != null) { - String rvcd = QueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"); - if (StrUtil.isNotBlank(rvcd)) { - wrapper.eq("HBRVCD", rvcd); - } + Map paramMap = new HashMap<>(); + String filterSql = buildFilterSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); } // 默认按修改时间倒序 - wrapper.orderByDesc("MODIFY_TIME"); + sql.append(" ORDER BY a.MODIFY_TIME DESC NULLS LAST"); - // 2. 分页参数处理 - Page page = loadOptions == null ? null - : (Page) QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + Page page = loadOptions == null ? null + : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, SdOpinfoBH.class + ); - // 3. 执行查询 - Page resultPage; - if (page != null) { - resultPage = this.page(page, wrapper); - } else { - List list = this.list(wrapper); - resultPage = new Page<>(); - resultPage.setRecords(list); - resultPage.setTotal(list.size()); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page == null ? list.size() : page.getTotal()); + return result; + } + + /** + * 递归构建过滤 SQL + */ + private String buildFilterSql(DataSourceRequest.FilterDescriptor filter, + Map paramMap, int[] indexHolder) { + if (filter == null) return ""; + + List childFilters = filter.getFilters(); + if (CollUtil.isNotEmpty(childFilters)) { + List childConditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : childFilters) { + String childSql = buildFilterSql(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + childConditions.add(childSql); + } + } + if (childConditions.isEmpty()) return ""; + String logic = StrUtil.isNotBlank(filter.getLogic()) ? filter.getLogic() : "and"; + String connector = "and".equalsIgnoreCase(logic) ? " AND " : " OR "; + return "(" + String.join(connector, childConditions) + ")"; } - // 4. 构建结果 - DataSourceResult dataSourceResult = new DataSourceResult<>(); - dataSourceResult.setData(resultPage.getRecords()); - dataSourceResult.setTotal(resultPage.getTotal()); - return dataSourceResult; + String field = filter.getField(); + Object value = filter.getValue(); + String operator = filter.getOperator(); + + if (StrUtil.isBlank(field)) return ""; + + String column = mapToColumn(field); + if (StrUtil.isBlank(column)) return ""; + + if ("isnull".equalsIgnoreCase(operator)) return column + " IS NULL"; + if ("isnotnull".equalsIgnoreCase(operator)) return column + " IS NOT NULL"; + if (value == null) return ""; + + String paramKey = "p" + indexHolder[0]++; + paramMap.put(paramKey, value); + + if ("eq".equalsIgnoreCase(operator)) { + return column + " = #{map." + paramKey + "}"; + } else if ("neq".equalsIgnoreCase(operator)) { + return column + " != #{map." + paramKey + "}"; + } else if ("contains".equalsIgnoreCase(operator)) { + return column + " LIKE '%' || #{map." + paramKey + "} || '%'"; + } else if ("startswith".equalsIgnoreCase(operator)) { + return column + " LIKE #{map." + paramKey + "} || '%'"; + } else if ("endswith".equalsIgnoreCase(operator)) { + return column + " LIKE '%' || #{map." + paramKey + "}"; + } else if ("gt".equalsIgnoreCase(operator)) { + return column + " > #{map." + paramKey + "}"; + } else if ("gte".equalsIgnoreCase(operator)) { + return column + " >= #{map." + paramKey + "}"; + } else if ("lt".equalsIgnoreCase(operator)) { + return column + " < #{map." + paramKey + "}"; + } else if ("lte".equalsIgnoreCase(operator)) { + return column + " <= #{map." + paramKey + "}"; + } else if ("in".equalsIgnoreCase(operator)) { + return column + " IN (#{map." + paramKey + "})"; + } + return ""; + } + + /** + * 前端字段名 -> SQL 列名映射 + */ + private String mapToColumn(String field) { + if (StrUtil.isBlank(field)) return null; + return switch (field) { + case "stcd" -> "a.STCD"; + case "stnm" -> "a.STNM"; + case "rstcd" -> "a.RSTCD"; + case "ennm" -> "eng.ENNM"; + case "baseId" -> "a.BASE_ID"; + case "baseName" -> "eng.BASE_NAME"; + // 旧系统 rvcd 字段映射到 HBRVCD 列(保持兼容) + case "rvcd" -> "a.HBRVCD"; + case "hbrvcd" -> "vsrd.RVCD"; + case "url" -> "a.URL"; + case "remark" -> "a.REMARK"; + case "modifyTime" -> "a.MODIFY_TIME"; + case "usfl" -> "a.USFL"; + default -> null; + }; } @Override - public void addOrUpdate(MsObliqueImageB msObliqueImageB) { - if (StrUtil.isNotBlank(msObliqueImageB.getRstcd())){ - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StrUtil.isNotBlank(msObliqueImageB.getRstcd()), SdEngInfoBH::getStcd, msObliqueImageB.getRstcd()) - .eq(SdEngInfoBH::getIsDeleted, 0) - .select(SdEngInfoBH::getLgtd, SdEngInfoBH::getLttd, SdEngInfoBH::getBaseId, SdEngInfoBH::getBaseName) - .orderByAsc(SdEngInfoBH::getBaseId, SdEngInfoBH::getOrderIndex); - SdEngInfoBH sdEngInfoBH = engInfoBHService.getOne(wrapper); - if (sdEngInfoBH.getLgtd() != null){ - msObliqueImageB.setLgtd(sdEngInfoBH.getLgtd()); - } - if (sdEngInfoBH.getLttd() != null){ - msObliqueImageB.setLttd(sdEngInfoBH.getLttd()); - } - if (StrUtil.isNotBlank(sdEngInfoBH.getBaseName())){ - msObliqueImageB.setBaseName(sdEngInfoBH.getBaseName()); - } - if (StrUtil.isNotBlank(sdEngInfoBH.getBaseId())){ - msObliqueImageB.setBaseId(sdEngInfoBH.getBaseId()); - } - - } - - if (StrUtil.isBlank(msObliqueImageB.getId())) { - addMsObliqueImageB(msObliqueImageB); - } else { - updateMsObliqueImageB(msObliqueImageB); - } - } - - @Override - public void delete(String id) { - msObliqueImageBMapper.deleteById(id); - } - - private void addMsObliqueImageB(MsObliqueImageB msObliqueImageB) { - // 查询新增的倾斜摄影是否已存在 - String rstcd = msObliqueImageB.getRstcd(); - if (StrUtil.isBlank(rstcd)) { + @Transactional(rollbackFor = Exception.class) + public void addOrUpdate(SdOpinfoBH entity) { + if (StrUtil.isBlank(entity.getRstcd())) { throw new BizException("电站不能为空"); } - String id = "OSGB_" + rstcd; - MsObliqueImageB old = msObliqueImageBMapper.selectById(id); - if (old != null) { - throw new BizException("该电站已存在倾斜摄影"); + + // 查询电站信息补充经纬度和基地信息 + SdEngInfoBH engInfo = engInfoBHService.lambdaQuery() + .eq(SdEngInfoBH::getStcd, entity.getRstcd()) + .eq(SdEngInfoBH::getIsDeleted, 0) + .select(SdEngInfoBH::getLgtd, SdEngInfoBH::getLttd, + SdEngInfoBH::getBaseId, SdEngInfoBH::getBaseName) + .one(); + if (engInfo == null) { + throw new BizException("电站不存在:" + entity.getRstcd()); } - msObliqueImageB.setSttpCode("OSGB"); - msObliqueImageB.setSttpName("倾斜摄影"); - if (StrUtil.isBlank(msObliqueImageB.getRvcd())) { - msObliqueImageB.setRvcd(msObliqueImageB.getHbrvcd()); + if (engInfo.getLgtd() != null) { + entity.setLgtd(engInfo.getLgtd()); } - if (StrUtil.isBlank(msObliqueImageB.getRvcdName())) { - msObliqueImageB.setRvcdName(msObliqueImageB.getHbrvcdName()); + if (engInfo.getLttd() != null) { + entity.setLttd(engInfo.getLttd()); } - msObliqueImageB.setStcd("OSGB_" + msObliqueImageB.getRstcd()); - msObliqueImageB.setId("OSGB_" + msObliqueImageB.getRstcd()); - msObliqueImageB.setSttpFullPath("OSGB,"); - msObliqueImageB.setSttpTreeLevel(1); - String sttp = msObliqueImageBMapper.getSttp(); - if (StrUtil.isBlank(sttp)) { + if (StrUtil.isNotBlank(engInfo.getBaseId())) { + entity.setBaseId(engInfo.getBaseId()); + } + + // 获取 OSGB 对应的 STTP ID + String osgbSttpId = msObliqueImageBMapper.getOpgbSttpId(); + if (StrUtil.isBlank(osgbSttpId)) { throw new BizException("倾斜摄影对应的sttp在SD_STTP_B中找不到"); } - msObliqueImageB.setSttp(sttp); - // 设置通用字段 + entity.setSttp(osgbSttpId); + + // 生成 ID 和 STCD + String stcd = "OSGB_" + entity.getRstcd(); + entity.setStcd(stcd); + + long count = this.count(new LambdaQueryWrapper().eq(SdOpinfoBH::getStcd, stcd)); + String userId = currentUserIdOrSystem(); - msObliqueImageB.setRecordUser(userId); - Date now = new java.util.Date(); - msObliqueImageB.setModifyTime(now); - msObliqueImageB.setModifyUser(userId); - msObliqueImageB.setIsDeleted(0); - msObliqueImageBMapper.insert(msObliqueImageB); + Date now = new Date(); + + if (count==0) { + entity.setRecordUser(userId); + entity.setRecordTime(now); + entity.setModifyUser(userId); + entity.setModifyTime(now); + entity.setIsDeleted(0); + this.save(entity); + } else { + entity.setModifyUser(userId); + entity.setModifyTime(now); + this.updateById(entity); + } } - private void updateMsObliqueImageB(MsObliqueImageB msObliqueImageB) { - String userId = currentUserIdOrSystem(); - msObliqueImageB.setModifyUser(userId); - msObliqueImageB.setModifyTime(new java.util.Date()); - this.updateById(msObliqueImageB); + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String stcd) { + msObliqueImageBMapper.deleteById(stcd); + // id 即 stcd +// LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); +// wrapper.eq(SdOpinfoBH::getStcd, stcd); +// wrapper.set(SdOpinfoBH::getIsDeleted, 1); +// wrapper.set(SdOpinfoBH::getDeleteUser, SecurityUtils.getCurrentUsername()); +// wrapper.set(SdOpinfoBH::getDeleteTime, new Date()); +// if (!this.update(wrapper)) { +// throw new BizException("删除失败:" + stcd); +// } } private String currentUserIdOrSystem() { @@ -175,4 +255,4 @@ public class MsObliqueImageBServiceImpl extends ServiceImpl