鞍钢鲅鱼圈能源管控系统后端代码
liriming
2 天以前 656039ea9f1393b0e04f5e6443e05a71c463ff77
Merge branch 'master' of http://dlindusit.com:53929/r/ansteel
已添加1个文件
已修改13个文件
283 ■■■■■ 文件已修改
ansteel-biz/db/mysql.sql 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerDemandDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerDemandHisReqDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingTraceDataDTO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceDataEntity.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceDataService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceDataServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerDemandService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerDemandServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/db/mysql.sql
@@ -553,12 +553,17 @@
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `rel_id`     varchar(36) NULL DEFAULT NULL COMMENT '关联ID',
    `process`     varchar(20) NULL DEFAULT NULL COMMENT '工序名称',
    `ex_obj`     varchar(20) NULL DEFAULT NULL COMMENT '异常对象',
    `clock`       varchar(20) NULL DEFAULT NULL COMMENT '查询时间',
    `data_type`  varchar(20) NULL DEFAULT NULL COMMENT '数据类型',
    `point_no`   varchar(20) NULL DEFAULT NULL COMMENT '异常点位编号',
    `point_name` varchar(20) NULL DEFAULT NULL COMMENT '异常点位名称',
    `ex_date`    datetime NULL DEFAULT NULL COMMENT '异常时间',
    `ex_type`    varchar(20) NULL DEFAULT NULL COMMENT '异常原因',
    PRIMARY KEY (`id`) USING BTREE
    `ex_time`    datetime NULL DEFAULT NULL COMMENT '异常时间',
    `ex_type`    varchar(200) NULL DEFAULT NULL COMMENT '异常原因',
    `create_date` datetime COMMENT '创建时间',
    PRIMARY KEY (`id`) USING BTREE,
    key           idx_rel_id (rel_id)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '焦化工序数据异常';
-- ----------------------------
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java
@@ -19,6 +19,7 @@
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
@@ -74,6 +75,9 @@
    @Autowired
    private CokingTraceChartService cokingTraceChartService;
    @Autowired
    private CokingTraceDataService cokingTraceDataService;
    @Resource
    private DataPointApi dataPointApi;
@@ -81,38 +85,53 @@
    private IndItemApi indItemApi;
    @GetMapping("/analy-ind/list")
    @Operation(summary = "焦化工序-指标分析")
    @Operation(summary = "焦化总图-指标分析")
    public CommonResult<List<CokingAnalyIndDTO>> getCokingAnalyIndList(@RequestParam Map<String, Object> params) {
        List<CokingAnalyIndEntity> list = cokingAnalyIndService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingAnalyIndDTO.class));
    }
    @GetMapping("/analy-trend/list")
    @Operation(summary = "焦化工序-趋势分析")
    @Operation(summary = "焦化工序-趋势分析(废弃)")
    public CommonResult<List<CokingAnalyTrendDTO>> getCokingAnalyTrendList(@RequestParam Map<String, Object> params) {
        List<CokingAnalyTrendEntity> list = cokingAnalyTrendService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingAnalyTrendDTO.class));
    }
    @GetMapping("/process-child/list")
    @Operation(summary = "焦化工序-子工序指标")
    @Operation(summary = "焦化总图-子工序指标")
    public CommonResult<List<CokingProcessChildDTO>> getCokingProcessChildList(@RequestParam Map<String, Object> params) {
        List<CokingProcessChildEntity> list = cokingProcessChildService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingProcessChildDTO.class));
    }
    @GetMapping("/process-main/list")
    @Operation(summary = "焦化工序-主工序指标")
    @Operation(summary = "焦化总图-主工序指标")
    public CommonResult<List<CokingProcessMainDTO>> getCokingProcessMainList(@RequestParam Map<String, Object> params) {
        List<CokingProcessMainEntity> list = cokingProcessMainService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingProcessMainDTO.class));
    }
    @GetMapping("/prod-day/list")
    @Operation(summary = "焦化工序-日生产信息")
    @Operation(summary = "焦化总图-日生产信息")
    public CommonResult<List<CokingProdDayDTO>> getCokingProdDayList(@RequestParam Map<String, Object> params) {
        List<CokingProdDayEntity> list = cokingProdDayService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingProdDayDTO.class));
    }
    @GetMapping("/ex-data/list")
    @Operation(summary = "焦化总图-异常数据")
    public CommonResult<List<CokingTraceDataDTO>> getExDataList(@RequestParam Map<String, Object> params) {
        String clock = (String) params.get("clock");
        if (StringUtils.isBlank(clock)) {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd");
            params.put("clock", clock);
        }
        List<CokingTraceDataEntity> list = cokingTraceDataService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingTraceDataDTO.class));
    }
@@ -125,9 +144,21 @@
    @GetMapping("/overview/abnormal-data")
    @Operation(summary = "各工序-异常数据")
    public CommonResult<List<CokingTraceSuggestEntity>> getAbnormalData(@RequestParam Map<String, Object> params) {
        List<CokingTraceSuggestEntity> result = cokingTraceSuggestService.getAbnormalData(params);
        return success(result);
    public CommonResult<List<CokingTraceDataDTO>> getAbnormalData(@RequestParam Map<String, Object> params) {
        String processType = (String) params.get("processType");
        if (StringUtils.isBlank(processType)) {
            return success(new ArrayList<>());
        }
        String clock = (String) params.get("clock");
        if (StringUtils.isBlank(clock)) {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_YEAR, -1);
            clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd");
            params.put("clock", clock);
        }
        List<CokingTraceDataEntity> list = cokingTraceDataService.list(params);
        return success(ConvertUtils.sourceToTarget(list, CokingTraceDataDTO.class));
    }
    @GetMapping("/trace-suggest/list")
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -433,10 +433,7 @@
        List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
        List<Double> monthValues = new ArrayList<>();
        if (CollectionUtils.isEmpty(monthChartData)) {
            monthValues =  monthChartData.stream().map(item -> {
                return item.getV();
            }).collect(Collectors.toList());
            monthValues =  monthChartData.stream().map(item -> item.getV()).collect(Collectors.toList());
            result.setMax(monthValues.stream().max(Double::compareTo).get());
            result.setMin(monthValues.stream().min(Double::compareTo).get());
        }
@@ -488,4 +485,73 @@
        }
        return success(result);
    }
    @GetMapping("/demand/history")
    @Operation(summary = "负荷移植-实测需量,有功功率 历史")
    public CommonResult<PowerHistoryDTO> getPowerDemandHistory(@RequestBody PowerDemandHisReqDTO dto) {
        log.info("请求参数: {}", JSONObject.toJSONString(dto));
        // 参数校验
        if (StringUtils.isBlank(dto.getCode())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "code不能为空");
        }
        if (StringUtils.isBlank(dto.getQueryType())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空");
        }
        PowerDemandEntity powerDemand = powerDemandService.getByCode(dto.getCode());
        if (powerDemand == null) {
            log.info("未找到code对应的数据: {}", dto.getCode());
            return success(new PowerHistoryDTO());
        }
        String queryType = dto.getQueryType().toUpperCase();
        String pointNo;
        switch (queryType.toUpperCase()) {
            case "D":
                pointNo = powerDemand.getCurDemand();
                break;
            case "P":
                pointNo = powerDemand.getActivePower();
                break;
            default:
                throw new IllegalArgumentException("不支持的queryType: " + queryType);
        }
        // 默认查最近24小时
        Date end = Optional.ofNullable(dto.getEndTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.MILLISECOND, 0);
            cal.set(Calendar.SECOND, 0);
            return cal.getTime();
        });
        Date start = Optional.ofNullable(dto.getStartTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.setTime(end);
            cal.add(Calendar.MINUTE, -1440); // 24小时前
            return cal.getTime();
        });
        // 查询历史数据
        ApiPointValueQueryDTO query = new ApiPointValueQueryDTO();
        query.setPointNo(pointNo);
        query.setStart(start);
        query.setEnd(end);
        log.info("开始查询实测需量/有功功率历史数据,测点: {}", pointNo);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(query);
        // 构建返回结果
        PowerHistoryDTO result = new PowerHistoryDTO();
        result.setCategories(DateUtils.getTimeScale(start, end, 60));
        result.setDataList(chartData.stream()
                .map(pv -> new Object[]{
                        DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND),
                        pv.getV()
                })
                .collect(Collectors.toList()));
        return success(result);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerDemandDTO.java
@@ -21,6 +21,9 @@
    @Schema(description = "机组名称")
    private String name;
    @Schema(description = "编码")
    private String code;
    @Schema(description = "月最大需量")
    private String maxDemand;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerDemandHisReqDTO.java
对比新文件
@@ -0,0 +1,27 @@
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @author dyk
 * @Description
 * @createTime 2025年04月23日
 */
@Data
public class PowerDemandHisReqDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String code;
    private String queryType;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/dto/CokingTraceDataDTO.java
@@ -24,6 +24,15 @@
    @Schema(description = "关联ID")
    private String relId;
    @Schema(description = "工序名称")
    private String process;
    @Schema(description = "异常对象")
    private String exObj;
    @Schema(description = "查询时间")
    private String clock;
    @Schema(description = "数据类型")
    private String dataType;
@@ -34,7 +43,7 @@
    private String pointName;
    @Schema(description = "异常时间")
    private Date exDate;
    private Date exTime;
    @Schema(description = "异常原因")
    private String exType;
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceDataEntity.java
@@ -23,6 +23,21 @@
     * 关联ID
     */
    private String relId;
    /**
     * 工序名称
     */
    private String process;
    /**
     * 异常对象
     */
    private String exObj;
    /**
     * 查询时间
     */
    private String clock;
    /**
     * 数据类型
     */
@@ -38,9 +53,14 @@
    /**
     * 异常时间
     */
    private Date exDate;
    private Date exTime;
    /**
     * 异常原因
     */
    private String exType;
    /**
     * 创建时间
     */
    private Date createDate;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingOverviewService.java
@@ -16,4 +16,6 @@
    Map<String,List<CokingOverviewDTO>> list(Map<String, Object> params);
    void insert(List<CokingOverviewEntity> result);
    void deleteByProcessType(String processType, String clock);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceDataService.java
@@ -14,4 +14,8 @@
 */
public interface CokingTraceDataService {
    List<CokingTraceDataEntity> list(Map<String, Object> params);
    void insertList(List<CokingTraceDataEntity> list);
    void deleteByExObj(String exObj, String clock);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingOverviewServiceImpl.java
@@ -79,4 +79,12 @@
    public void insert(List<CokingOverviewEntity> result) {
        cokingOverviewDao.insert(result);
    }
    @Override
    public void deleteByProcessType(String processType, String clock) {
        QueryWrapper<CokingOverviewEntity> queryWrapperDay = new QueryWrapper<>();
        queryWrapperDay.eq("process_type", processType);
        queryWrapperDay.eq("clock", clock);
        cokingOverviewDao.delete(queryWrapperDay);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceDataServiceImpl.java
@@ -4,6 +4,7 @@
import com.iailab.module.ansteel.coking.dao.CokingTraceDataDao;
import com.iailab.module.ansteel.coking.entity.CokingTraceDataEntity;
import com.iailab.module.ansteel.coking.service.CokingTraceDataService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,6 +25,26 @@
    @Override
    public List<CokingTraceDataEntity> list(Map<String, Object> params) {
        return cokingTraceDataDao.selectList(new QueryWrapper<>());
        String processType = (String) params.get("processType");
        String clock = (String) params.get("clock");
        QueryWrapper<CokingTraceDataEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotBlank(processType), "ex_obj", processType)
                .eq(StringUtils.isNotBlank(clock), "clock", clock)
                .orderByAsc("create_date");
        return cokingTraceDataDao.selectList(queryWrapper);
    }
    @Override
    public void insertList(List<CokingTraceDataEntity> list) {
        cokingTraceDataDao.insert(list);
    }
    @Override
    public void deleteByExObj(String exObj, String clock) {
        QueryWrapper<CokingTraceDataEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ex_obj", exObj)
                .eq("clock", clock);
        cokingTraceDataDao.delete(queryWrapper);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
@@ -49,6 +49,8 @@
    private CokingTraceChartService cokingTraceChartService;
    @Resource
    private CokingTraceSuggestService cokingTraceSuggestService;
    @Resource
    private CokingTraceDataService cokingTraceDataService;
    @Override
    public void run(String processTypes) {
@@ -131,13 +133,18 @@
                    overviewEntity.setSubProcessType(entry.getKey());
                    overviewEntity.setClock(clock);
                    result.add(overviewEntity);
                    // 清理旧数据
                    cokingOverviewService.deleteByProcessType(processType, clock);
                    cokingTraceDataService.deleteByExObj(processType, clock);
                }
                cokingOverviewService.insert(result);
                // 指标运行趋势
                List<CokingProcessConfEntity> indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList());
                List<CokingTraceChartEntity> cokingTraceChartEntityList = new ArrayList<>(indRunTrend.size());
                List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>();
                // List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>();
                List<CokingTraceDataEntity> exDatalist = new ArrayList<>(indRunTrend.size());
                indRunTrend.forEach(e -> {
                    CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity();
                    cokingTraceChartEntity.setRelId(relId);
@@ -158,10 +165,11 @@
                    cokingTraceChartEntityList.add(cokingTraceChartEntity);
                    // 异常数据处理
                    suggestEntitieList.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock));
                    exDatalist.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock));
                });
                cokingTraceChartService.insert(cokingTraceChartEntityList);
                cokingTraceSuggestService.insert(suggestEntitieList);
                // cokingTraceSuggestService.insert(suggestEntitieList);
                cokingTraceDataService.insertList(exDatalist);
            }
        } catch (Exception ex) {
@@ -171,8 +179,8 @@
    }
    private List<CokingTraceSuggestEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) {
        List<CokingTraceSuggestEntity> suggestEntities = new ArrayList<>();
    private List<CokingTraceDataEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) {
        List<CokingTraceDataEntity> suggestEntities = new ArrayList<>();
        switch (ProcessConfDataTypeEnum.getEumByCode(e.getDataType())) {
            case DATAPOINT:
                ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO();
@@ -198,7 +206,15 @@
                        content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(无数据)";
                    }
                    if (StringUtils.isNotBlank(content)) {
                        suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date()));
                        CokingTraceDataEntity ctd = new CokingTraceDataEntity();
                        ctd.setId(UUID.randomUUID().toString());
                        ctd.setRelId(relId);
                        ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName());
                        ctd.setClock(clock);
                        ctd.setExObj(e.getIndType()+"_AD");
                        ctd.setExTime(calendar.getTime());
                        ctd.setExType(content);
                        suggestEntities.add(ctd);
                    }
                    calendar.add(Calendar.DAY_OF_YEAR,1);
                }
@@ -228,7 +244,16 @@
                        content = time + " " + e.getIndName() + "数据异常(无数据)";
                    }
                    if (StringUtils.isNotBlank(content)) {
                        suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date()));
                        CokingTraceDataEntity ctd = new CokingTraceDataEntity();
                        ctd.setId(UUID.randomUUID().toString());
                        ctd.setRelId(relId);
                        ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName());
                        ctd.setClock(clock);
                        ctd.setExObj(e.getIndType()+"_AD");
                        ctd.setExTime(intCalendar.getTime());
                        ctd.setExType(content);
                        suggestEntities.add(ctd);
                        // suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date()));
                    }
                    intCalendar.add(Calendar.DAY_OF_YEAR,1);
                }
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerDemandService.java
@@ -14,4 +14,6 @@
public interface PowerDemandService {
    List<PowerDemandEntity> list(Map<String, Object> params);
    PowerDemandEntity getByCode(String code);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerDemandServiceImpl.java
@@ -5,7 +5,9 @@
import com.iailab.module.ansteel.power.entity.PowerDemandEntity;
import com.iailab.module.ansteel.power.service.PowerDemandService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
@@ -26,8 +28,16 @@
    @Override
    public List<PowerDemandEntity> list(Map<String, Object> params) {
        QueryWrapper<PowerDemandEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("code", params.get("code"));
        queryWrapper.orderByAsc("sort");
        return PowerDemandDao.selectList(queryWrapper);
    }
    public PowerDemandEntity getByCode(String code) {
        QueryWrapper<PowerDemandEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("code", code);
        return PowerDemandDao.selectOne(queryWrapper);
    }
}