沿程配置表代码提交

This commit is contained in:
lilin 2026-07-07 18:55:12 +08:00
parent e5dcdaf299
commit ec8ba69d65
11 changed files with 256 additions and 21 deletions

View File

@ -13,13 +13,12 @@ import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService; import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService;
import com.yfd.platform.utils.DataSourceRequestUtil; import com.yfd.platform.utils.DataSourceRequestUtil;
import com.yfd.platform.utils.SecurityUtils;
import io.lettuce.core.dynamic.annotation.Param;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@ -66,8 +65,11 @@ public class MsAlongBController {
if (StrUtil.isBlank(msAlongB.getCode())) { if (StrUtil.isBlank(msAlongB.getCode())) {
throw new BizException("沿程配置编码(code)不能为空."); throw new BizException("沿程配置编码(code)不能为空.");
} }
msAlongB.setRecordUser(SecurityUtils.getUserId());
//msAlongB.setRecordUser(SecurityUtils.getCurrentUsername());
msAlongBService.saveOrUpdate(msAlongB); msAlongBService.saveOrUpdate(msAlongB);
return ResponseResult.success("保存成功."); return ResponseResult.successData(msAlongB.getId());
} }
@PostMapping("/wbsb/GetKendoList") @PostMapping("/wbsb/GetKendoList")
@ -82,4 +84,10 @@ public class MsAlongBController {
msAlongBService.delelteByIds(ids); msAlongBService.delelteByIds(ids);
return ResponseResult.success("删除成功."); return ResponseResult.success("删除成功.");
} }
@PostMapping("/noAuth/GetKendoList")
@Operation(summary = "查询水电基地流域字典列表")
public ResponseResult getWbsbList(@RequestParam String stcd) {
return ResponseResult.successData(msAlongBService.getWbsbList(stcd));
}
} }

View File

@ -1,5 +1,6 @@
package com.yfd.platform.qgc_lygk.along.controller; package com.yfd.platform.qgc_lygk.along.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
@ -7,6 +8,7 @@ import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto;
import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/** /**
* 沿程配置明细表控制器 * 沿程配置明细表控制器
* *
@ -44,11 +48,11 @@ public class MsAlongDetBController {
*/ */
@Operation(summary = "保存或修改") @Operation(summary = "保存或修改")
@PostMapping("/save") @PostMapping("/save")
public ResponseResult save(@RequestBody MsAlongDetB msAlongDetB) { public ResponseResult save(@RequestBody List<MsAlongDetTreeDto> treeList) {
if (msAlongDetB == null) { if (CollUtil.isEmpty(treeList)) {
return ResponseResult.error("沿程配置明细信息不能为空."); return ResponseResult.error("数据不能为空.");
} }
msAlongDetBService.saveOrUpdate(msAlongDetB); msAlongDetBService.saveOrUpdateBatchData(treeList);
return ResponseResult.success("保存成功."); return ResponseResult.success("保存成功.");
} }

View File

@ -0,0 +1,18 @@
package com.yfd.platform.qgc_lygk.along.domain;
import lombok.Data;
import java.util.List;
@Data
public class MsAlongDetTreeDto {
private String id; // 记录ID更新时传
private String alongId; // 关联主表ID
private String stcd; // 断面编码
private String sttp; // 类型编码
private Integer sort; // 排序
private String stnm; // 仅用于显示不存表
private String rstcd; // 仅用于显示不存表
private String parentId; // 前端用不存表
private List<MsAlongDetTreeDto> children; // 子节点
}

View File

@ -0,0 +1,26 @@
package com.yfd.platform.qgc_lygk.along.domain;
import lombok.Data;
import java.util.List;
@Data
public class PowerDto {
// 水电水利工程编码
private String stcd;
// 水电水利工程名称
private String stnm;
// 水电水利工程名称
private String sttp;
// 主表实体
private String sttpCode;
// 主表实体
private String sttpName;
// 主表实体
private String rstcd;
}

View File

@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
import org.apache.ibatis.annotations.Mapper; import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
import org.apache.ibatis.annotations.*;
import java.util.List;
/** /**
* 沿程配置表 Mapper 接口 * 沿程配置表 Mapper 接口
@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface MsAlongBMapper extends BaseMapper<MsAlongB> { public interface MsAlongBMapper extends BaseMapper<MsAlongB> {
@Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " +
"FROM V_MS_STBPRP_T " +
"WHERE RSTCD = #{stcd}")
@Results({
@Result(column = "STCD", property = "stcd"),
@Result(column = "STNM", property = "stnm"),
@Result(column = "STTP", property = "sttp"),
@Result(column = "STTP_CODE", property = "sttpCode"),
@Result(column = "STTP_NAME", property = "sttpName"),
@Result(column = "RSTCD", property = "rstcd")
})
List<PowerDto> getWbsbList(@Param("stcd") String stcd);
} }

View File

@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB;
import org.apache.ibatis.annotations.Mapper; import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
import org.apache.ibatis.annotations.*;
import java.util.List;
/** /**
* 沿程配置明细表 Mapper 接口 * 沿程配置明细表 Mapper 接口
@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface MsAlongDetBMapper extends BaseMapper<MsAlongDetB> { public interface MsAlongDetBMapper extends BaseMapper<MsAlongDetB> {
@Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " +
"FROM V_MS_STBPRP_T " +
"WHERE STCD = #{stcd}")
@Results({
@Result(column = "STCD", property = "stcd"),
@Result(column = "STNM", property = "stnm"),
@Result(column = "STTP", property = "sttp"),
@Result(column = "STTP_CODE", property = "sttpCode"),
@Result(column = "STTP_NAME", property = "sttpName"),
@Result(column = "RSTCD", property = "rstcd")
})
List<PowerDto> getWbsbList(@Param("stcd") String stcd);
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
import java.util.List; import java.util.List;
@ -23,6 +24,8 @@ public interface IMsAlongBService extends IService<MsAlongB> {
void delelteByIds(List<String> ids); void delelteByIds(List<String> ids);
List<PowerDto> getWbsbList(String stcd);
// /** // /**
// * 保存或更新沿程配置 // * 保存或更新沿程配置
// * // *

View File

@ -3,7 +3,11 @@ package com.yfd.platform.qgc_lygk.along.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto;
import java.util.List;
/** /**
* 沿程配置明细表 Service 接口 * 沿程配置明细表 Service 接口
@ -19,4 +23,6 @@ public interface IMsAlongDetBService extends IService<MsAlongDetB> {
* @return 数据源结果 * @return 数据源结果
*/ */
DataSourceResult<MsAlongDetB> getKendoList(DataSourceRequest dataSourceRequest); DataSourceResult<MsAlongDetB> getKendoList(DataSourceRequest dataSourceRequest);
ResponseResult saveOrUpdateBatchData(List<MsAlongDetTreeDto> treeList);
} }

View File

@ -1,20 +1,28 @@
package com.yfd.platform.qgc_lygk.along.service.impl; package com.yfd.platform.qgc_lygk.along.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_base.domain.SdRvcdDic;
import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper;
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
import com.yfd.platform.utils.CodeToNameMetadataBo;
import com.yfd.platform.utils.DataSourceRequestUtil; import com.yfd.platform.utils.DataSourceRequestUtil;
import com.yfd.platform.utils.DictCodeToNameConverter;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* 沿程配置表 Service 实现类 * 沿程配置表 Service 实现类
@ -24,6 +32,11 @@ import java.util.List;
@Service @Service
public class MsAlongBServiceImpl extends ServiceImpl<MsAlongBMapper, MsAlongB> implements IMsAlongBService { public class MsAlongBServiceImpl extends ServiceImpl<MsAlongBMapper, MsAlongB> implements IMsAlongBService {
@Resource
private MsAlongBMapper msAlongBMapper;
@Resource
private SdRvcdDicMapper sdRvcdDicMapper;
@Override @Override
public DataSourceResult<MsAlongB> getKendoList(DataSourceRequest dataSourceRequest) { public DataSourceResult<MsAlongB> getKendoList(DataSourceRequest dataSourceRequest) {
// 1. 构建查询条件 // 1. 构建查询条件
@ -46,7 +59,29 @@ public class MsAlongBServiceImpl extends ServiceImpl<MsAlongBMapper, MsAlongB> i
resultPage.setTotal(list.size()); resultPage.setTotal(list.size());
} }
// 4. 构建结果 // 4. 循环填充 rvnm
List<MsAlongB> records = resultPage.getRecords();
if (CollUtil.isNotEmpty(records)) {
for (MsAlongB record : records) {
String rvcd = record.getRvcd();
if (StrUtil.isNotBlank(rvcd)) {
// 调用现有 Mapper 方法查询单个 rvcd
List<SdRvcdDic> dictList = sdRvcdDicMapper.selectRegDropdown(null, rvcd);
if (CollUtil.isNotEmpty(dictList)) {
// 取第一条记录的 RVNM DISPLAY_RVNM
String displayRvnm = dictList.get(0).getRvnm();
// 如果只需要末级名称可截取最后一个 '-' 后的部分
// 如果直接使用完整路径则直接赋值
record.setRvnm(displayRvnm);
// 若需要末级名称
// int lastDash = displayRvnm.lastIndexOf('-');
// record.setRvnm(lastDash > 0 ? displayRvnm.substring(lastDash + 1) : displayRvnm);
}
}
}
}
// 5. 构建结果
DataSourceResult<MsAlongB> dataSourceResult = new DataSourceResult<>(); DataSourceResult<MsAlongB> dataSourceResult = new DataSourceResult<>();
dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setData(resultPage.getRecords());
dataSourceResult.setTotal(resultPage.getTotal()); dataSourceResult.setTotal(resultPage.getTotal());
@ -56,10 +91,16 @@ public class MsAlongBServiceImpl extends ServiceImpl<MsAlongBMapper, MsAlongB> i
@Override @Override
public void delelteByIds(List<String> ids) { public void delelteByIds(List<String> ids) {
for (String id : ids) { for (String id : ids) {
this.delelteByIds(Collections.singletonList(id)); this.removeById(id);
} }
} }
@Override
public List<PowerDto> getWbsbList(String stcd) {
List<PowerDto> powerDtos = msAlongBMapper.getWbsbList(stcd);
return powerDtos;
}
// @Override // @Override
// public boolean saveOrUpdate(MsAlongB msAlongB) { // public boolean saveOrUpdate(MsAlongB msAlongB) {
// super.saveOrUpdate(msAlongB); // super.saveOrUpdate(msAlongB);

View File

@ -1,23 +1,29 @@
package com.yfd.platform.qgc_lygk.along.service.impl; package com.yfd.platform.qgc_lygk.along.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB;
import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto;
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper;
import com.yfd.platform.qgc_lygk.along.mapper.MsAlongDetBMapper; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongDetBMapper;
import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService;
import com.yfd.platform.utils.CodeToNameMetadataBo; import com.yfd.platform.utils.*;
import com.yfd.platform.utils.DataSourceRequestUtil;
import com.yfd.platform.utils.DictCodeToNameConverter;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* 沿程配置明细表 Service 实现类 * 沿程配置明细表 Service 实现类
@ -30,6 +36,9 @@ public class MsAlongDetBServiceImpl extends ServiceImpl<MsAlongDetBMapper, MsAlo
@Resource @Resource
private DictCodeToNameConverter dictCodeToNameConverter; private DictCodeToNameConverter dictCodeToNameConverter;
@Resource
private MsAlongDetBMapper msAlongDetBMapper;
private static final List<CodeToNameMetadataBo> CODE_TO_NAME_META_LIST = new ArrayList<>(); private static final List<CodeToNameMetadataBo> CODE_TO_NAME_META_LIST = new ArrayList<>();
static { static {
@ -62,10 +71,99 @@ public class MsAlongDetBServiceImpl extends ServiceImpl<MsAlongDetBMapper, MsAlo
resultPage.setTotal(list.size()); resultPage.setTotal(list.size());
} }
// ========== 新增填充 stnm ==========
List<MsAlongDetB> records = resultPage.getRecords();
if (CollUtil.isNotEmpty(records)) {
for (MsAlongDetB record : records) {
String stcd = record.getStcd();
if (StrUtil.isNotBlank(stcd)) {
// 调用 Mapper 方法查询测站信息
List<PowerDto> powerDtos = msAlongDetBMapper.getWbsbList(stcd);
if (CollUtil.isNotEmpty(powerDtos)) {
// 取第一个结果通常一个 STCD 只对应一条记录
String stnm = powerDtos.get(0).getStnm();
record.setStnm(stnm);
}
}
}
}
// 4. 构建结果 // 4. 构建结果
DataSourceResult<MsAlongDetB> dataSourceResult = new DataSourceResult<>(); DataSourceResult<MsAlongDetB> dataSourceResult = new DataSourceResult<>();
dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setData(resultPage.getRecords());
dataSourceResult.setTotal(resultPage.getTotal()); dataSourceResult.setTotal(resultPage.getTotal());
return dataSourceResult; return dataSourceResult;
} }
@Override
public ResponseResult saveOrUpdateBatchData(List<MsAlongDetTreeDto> treeList) {
// 1. 递归扁平化将树形结构转为平铺的实体列表
List<MsAlongDetB> flatList = new ArrayList<>();
for (MsAlongDetTreeDto root : treeList) {
flattenTree(root, flatList);
}
if (flatList.isEmpty()) {
return ResponseResult.error("没有有效数据.");
}
// 2. 校验每条记录的 alongId 不为空
for (MsAlongDetB item : flatList) {
if (StrUtil.isBlank(item.getAlongId())) {
return ResponseResult.error("沿程配置ID(alongId)不能为空.");
}
}
// 3. 新增提取所有不同的 alongId删除这些主键下的旧明细
Set<String> alongIdSet = flatList.stream()
.map(MsAlongDetB::getAlongId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
if (CollUtil.isNotEmpty(alongIdSet)) {
LambdaUpdateWrapper<MsAlongDetB> deleteWrapper = new LambdaUpdateWrapper<>();
deleteWrapper.in(MsAlongDetB::getAlongId, alongIdSet)
.set(MsAlongDetB::getIsDeleted, "1"); // 逻辑删除标记
this.update(deleteWrapper);
}
// 4. 插入新数据注意需要清空旧记录的主键ID让数据库自增或雪花ID生成
for (MsAlongDetB item : flatList) {
item.setId(null); // 确保都是新增
}
// 5. 批量保存有则更新无则新增
this.saveOrUpdateBatch(flatList);
return ResponseResult.success("保存成功.");
}
/**
* 递归展开树形节点将每个节点转换为 MsAlongDetB 实体
*/
private void flattenTree(MsAlongDetTreeDto node, List<MsAlongDetB> flatList) {
// 1. 将当前节点转为实体
MsAlongDetB entity = new MsAlongDetB();
// 仅复制表中存在的字段
entity.setId(node.getId());
entity.setAlongId(node.getAlongId());
entity.setStcd(node.getStcd());
entity.setSttp(node.getSttp());
entity.setRstcd(node.getRstcd());
entity.setRecordUser(SecurityUtils.getUserId()); // 创建人
//entity.setRecordUser(SecurityUtils.getCurrentUsername()); // 创建人
if (node.getSort() != null){
entity.setSort(String.valueOf(node.getSort())); // 若传了排序
}
if (StrUtil.isBlank(entity.getId())) {
entity.setId(null);
}
flatList.add(entity);
// 2. 递归处理子节点
if (CollUtil.isNotEmpty(node.getChildren())) {
for (MsAlongDetTreeDto child : node.getChildren()) {
flattenTree(child, flatList);
}
}
}
} }

View File

@ -111,9 +111,10 @@ spring:
matching-strategy: ant_path_matcher matching-strategy: ant_path_matcher
data: data:
redis: redis:
host: ${REDIS_HOST:localhost} host: ${REDIS_HOST:172.16.21.142}
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:} password: ${REDIS_PASSWORD:zny5678}
database: ${REDIS_DATABASE:15}
timeout: 10000ms timeout: 10000ms
lettuce: lettuce:
pool: pool: