最新代码提交

This commit is contained in:
zhangji committed 2025-05-14 14:50:47 +08:00
1 parent e0ccdd908c
commit f378572ee6
20 files changed
+240 -23

No files matched your search

+2 -2
View File
@@ -1,10 +1,10 @@
{
"local": {
"baseUrl": "http://127.0.0.1:48080/admin-api",
"baseUrl": "http://127.0.0.1:8089/admin-api",
"token": "test1",
"adminTenantId": "1",
"appApi": "http://127.0.0.1:48080/app-api",
"appApi": "http://127.0.0.1:8089/app-api",
"appToken": "test247",
"appTenantId": "1"
},
@@ -134,6 +134,10 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
return selectCount(new LambdaQueryWrapper<T>().eq(field, value));
}
default Long selectCount(SFunction<T, ?> field, Object value, SFunction<T, ?> field2, Object value2){
return selectCount(new LambdaQueryWrapper<T>().eq(field, value).eq(field2, value2));
}
default List<T> selectList() {
return selectList(new QueryWrapper<>());
}
@@ -214,5 +218,4 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
default int delete(SFunction<T, ?> field, Object value) {
return delete(new LambdaQueryWrapper<T>().eq(field, value));
}
}
@@ -8,5 +8,6 @@ package cn.iocoder.yudao.module.product.enums;
public interface DictTypeConstants {
String PRODUCT_SPU_STATUS = "product_spu_status"; // 商品 SPU 状态
String PRODUCT_SPU_TYPES = "product_spu_types"; // 商品 SPU 类型
}
@@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.product.enums.spu;
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 商品 SPU 状态
*
* @author 芋道源码
*/
@Getter
@AllArgsConstructor
public enum ProductSpuTypesEnum implements ArrayValuable<Integer> {
DISABLE(0, "商城商品"),
ENABLE(1, "提货柜商品");
public static final Integer[] ARRAYS = Arrays.stream(values()).map(ProductSpuTypesEnum::getTypes).toArray(Integer[]::new);
/**
* 状态
*/
private final Integer types;
/**
* 状态名
*/
private final String name;
@Override
public Integer[] array() {
return ARRAYS;
}
/**
* 判断是否是提货柜商品
*
* @param types 状态
* @return 是否是提货柜商品
*/
public static boolean isEnable(Integer types) {
return ENABLE.getTypes().equals(types);
}
}
@@ -58,6 +58,12 @@
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-system-biz</artifactId>
<version>2.4.1-jdk8-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -2,3 +2,13 @@
GET {{baseUrl}}/product/spu/get-detail?id=4
Authorization: Bearer {{token}}
tenant-id: {{adminTenantId}}
### 获得商品 SPU 分页(加上创建人)
GET {{baseUrl}}/product/spu/pageWithCreator?pageNo=1&pageSize=10&tabType=0
Authorization: Bearer {{token}}
tenant-id: {{adminTenantId}}
### 获得商品 SPU 分页 tab count
GET {{baseUrl}}/product/spu/get-count?types=0
Authorization: Bearer {{token}}
tenant-id: {{adminTenantId}}
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*;
import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
@@ -117,11 +118,20 @@ public class ProductSpuController {
return success(BeanUtils.toBean(pageResult, ProductSpuRespVO.class));
}
@GetMapping("/pageWithCreator")
@Operation(summary = "获得商品 SPU 分页(加上创建人)")
@PreAuthorize("@ss.hasPermission('product:spu:query')")
public CommonResult<PageResult<ProductSpuWithCreatorRespVO>> getSpuPageWithCreator(@Valid ProductSpuPageReqVO pageVO) {
PageResult<ProductSpuCreatorDO> pageResult = productSpuService.getSpuPageWithCreator(pageVO);
return success(BeanUtils.toBean(pageResult, ProductSpuWithCreatorRespVO.class));
}
@GetMapping("/get-count")
@Operation(summary = "获得商品 SPU 分页 tab count")
@Parameter(name = "types", description = "商品类型", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('product:spu:query')")
public CommonResult<Map<Integer, Long>> getSpuCount() {
return success(productSpuService.getTabsCount());
public CommonResult<Map<Integer, Long>> getSpuCount(@RequestParam("types") Integer types) {
return success(productSpuService.getTabsCount(types));
}
@GetMapping("/export")
@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -51,6 +52,12 @@ public class ProductSpuPageReqVO extends PageParam {
@Schema(description = "商品分类编号", example = "1")
private Long categoryId;
@Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer types;
@Schema(description = "创建人id", example = "1")
private String creator;
@Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@@ -61,6 +61,11 @@ public class ProductSpuRespVO {
@DictFormat(DictTypeConstants.PRODUCT_SPU_STATUS)
private Integer status;
@Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty(value = "商品类型", converter = DictConvert.class)
@DictFormat(DictTypeConstants.PRODUCT_SPU_TYPES)
private Integer types;
@Schema(description = "商品创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-05-24 00:00:00")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTypesEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -51,6 +52,10 @@ public class ProductSpuSaveReqVO {
@NotNull(message = "商品排序字段不能为空")
private Integer sort;
@Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "商品类型字段不能为空")
private Integer types;
// ========== SKU 相关字段 =========
@Schema(description = "规格类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
@@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 商品 SPU Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProductSpuWithCreatorRespVO extends ProductSpuRespVO {
@Schema(description = "创建者ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("创建者ID")
private String creator;
@Schema(description = "创建者姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("创建者姓名")
private String username;
}
@@ -9,7 +9,7 @@ Authorization: Bearer {{appToken}}
tenant-id: {{appTenantId}}
### 获得订单交易的分页(销售)
GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10&sortField=salesCount&sortAsc=true
GET {{appApi}}/product/spu/page?pageNo=1&pageSize=10&creator=1&sortField=salesCount&sortAsc=true
Authorization: Bearer {{appToken}}
tenant-id: {{appTenantId}}
@@ -24,6 +24,12 @@ public class AppProductSpuPageReqVO extends PageParam {
@Schema(description = "商品 SPU 编号数组", example = "1,3,5")
private List<Long> ids;
@Schema(description = "创建人id", example = "1")
private String creator;
@Schema(description = "商品类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer types;
@Schema(description = "分类编号", example = "1")
private Long categoryId;
@@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.product.dal.dataobject.spu;
import lombok.Data;
/**
* 商品 SPU DO
*
* @author 芋道源码
*/
@Data
public class ProductSpuCreatorDO extends ProductSpuDO {
/**
* 创建者姓名
*/
private String username;
}
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTypesEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -88,6 +89,13 @@ public class ProductSpuDO extends BaseDO {
*/
private Integer status;
/**
* 商品类型
*
* 枚举 {@link ProductSpuTypesEnum}
*/
private Integer types;
// ========== SKU 相关字段 =========
/**
@@ -4,13 +4,18 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO;
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.yudao.module.product.enums.ProductConstants;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.apache.ibatis.annotations.Mapper;
import org.apache.poi.ss.formula.functions.T;
import java.util.Objects;
import java.util.Set;
@@ -29,6 +34,7 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
LambdaQueryWrapperX<ProductSpuDO> queryWrapper = new LambdaQueryWrapperX<ProductSpuDO>()
.likeIfPresent(ProductSpuDO::getName, reqVO.getName())
.eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId())
.eqIfPresent(ProductSpuDO::getTypes, reqVO.getTypes())
.betweenIfPresent(ProductSpuDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ProductSpuDO::getSort)
.orderByDesc(ProductSpuDO::getId);
@@ -41,12 +47,13 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
*
* @return 触发警戒库存的 SPU 数量
*/
default Long selectCount() {
default Long selectCount(SFunction<ProductSpuDO, ?> field, Object value) {
LambdaQueryWrapperX<ProductSpuDO> queryWrapper = new LambdaQueryWrapperX<>();
// 库存小于等于警戒库存
queryWrapper.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK)
// 如果库存触发警戒库存且状态为回收站的话则不计入触发警戒库存的个数
.notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
.notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus())
.eq(field, value);
return selectCount(queryWrapper);
}
@@ -55,6 +62,10 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
*/
default PageResult<ProductSpuDO> selectPage(AppProductSpuPageReqVO pageReqVO, Set<Long> categoryIds) {
LambdaQueryWrapperX<ProductSpuDO> query = new LambdaQueryWrapperX<ProductSpuDO>()
//根据创建人查询商品
.eqIfPresent(ProductSpuDO::getCreator, pageReqVO.getCreator())
//根据类型查询商品
.eqIfPresent(ProductSpuDO::getTypes, pageReqVO.getTypes())
// 关键字匹配,目前只匹配商品名
.likeIfPresent(ProductSpuDO::getName, pageReqVO.getKeyword())
// 分类
@@ -146,4 +157,51 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
update(null, updateWrapper);
}
default PageResult<ProductSpuCreatorDO> selectPageWithCreator(ProductSpuPageReqVO pageReqVO){
Integer tabType = pageReqVO.getTabType();
MPJLambdaWrapperX<ProductSpuDO> query = new MPJLambdaWrapperX<ProductSpuDO>()
.selectAll(ProductSpuDO.class)
.selectAs(AdminUserDO::getUsername, ProductSpuCreatorDO::getUsername)
.likeIfPresent(ProductSpuDO::getName, pageReqVO.getName())
.eqIfPresent(ProductSpuDO::getCategoryId, pageReqVO.getCategoryId())
.eqIfPresent(ProductSpuDO::getTypes, pageReqVO.getTypes())
.eqIfPresent(ProductSpuDO::getCreator, pageReqVO.getCreator())
.betweenIfPresent(ProductSpuDO::getCreateTime, pageReqVO.getCreateTime())
.orderByDesc(ProductSpuDO::getSort)
.orderByDesc(ProductSpuDO::getId);
query.leftJoin(AdminUserDO.class,AdminUserDO::getId, ProductSpuDO::getCreator);
appendTabQuery2(tabType, query);
return selectJoinPage(pageReqVO,ProductSpuCreatorDO.class, query);
}
/**
* 添加后台 Tab 选项的查询条件
*
* @param tabType 标签类型
* @param query 查询条件
*/
static void appendTabQuery2(Integer tabType, MPJLambdaWrapperX<ProductSpuDO> query) {
// 出售中商品
if (ObjectUtil.equals(ProductSpuPageReqVO.FOR_SALE, tabType)) {
query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus());
}
// 仓储中商品
if (ObjectUtil.equals(ProductSpuPageReqVO.IN_WAREHOUSE, tabType)) {
query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus());
}
// 已售空商品
if (ObjectUtil.equals(ProductSpuPageReqVO.SOLD_OUT, tabType)) {
query.eqIfPresent(ProductSpuDO::getStock, 0);
}
// 警戒库存
if (ObjectUtil.equals(ProductSpuPageReqVO.ALERT_STOCK, tabType)) {
query.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK)
// 如果库存触发警戒库存且状态为回收站的话则不在警戒库存列表展示
.notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
}
// 回收站
if (ObjectUtil.equals(ProductSpuPageReqVO.RECYCLE_BIN, tabType)) {
query.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
}
}
}
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReq
import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReqVO;
import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO;
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
import org.springframework.scheduling.annotation.Async;
@@ -113,7 +114,7 @@ public interface ProductSpuService {
*
* @return Count 数量
*/
Map<Integer, Long> getTabsCount();
Map<Integer, Long> getTabsCount(Integer types);
/**
* 通过分类 categoryId 查询 SPU 个数
@@ -143,4 +144,5 @@ public interface ProductSpuService {
@Async
void updateBrowseCount(Long id, int incrCount);
PageResult<ProductSpuCreatorDO> getSpuPageWithCreator(ProductSpuPageReqVO pageVO);
}
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReq
import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO;
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper;
import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
@@ -157,6 +158,11 @@ public class ProductSpuServiceImpl implements ProductSpuService {
productSpuMapper.updateBrowseCount(id , incrCount);
}
@Override
public PageResult<ProductSpuCreatorDO> getSpuPageWithCreator(ProductSpuPageReqVO pageVO) {
return productSpuMapper.selectPageWithCreator(pageVO);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteSpu(Long id) {
@@ -248,23 +254,29 @@ public class ProductSpuServiceImpl implements ProductSpuService {
}
@Override
public Map<Integer, Long> getTabsCount() {
public Map<Integer, Long> getTabsCount(Integer types) {
Map<Integer, Long> counts = Maps.newLinkedHashMapWithExpectedSize(5);
// 查询销售中的商品数量
counts.put(ProductSpuPageReqVO.FOR_SALE,
productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()));
productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus(),
ProductSpuDO::getTypes, types));
// 查询仓库中的商品数量
counts.put(ProductSpuPageReqVO.IN_WAREHOUSE,
productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()));
productSpuMapper.selectCount(
ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus(),
ProductSpuDO::getTypes, types));
// 查询售空的商品数量
counts.put(ProductSpuPageReqVO.SOLD_OUT,
productSpuMapper.selectCount(ProductSpuDO::getStock, 0));
productSpuMapper.selectCount(
ProductSpuDO::getStock, 0,
ProductSpuDO::getTypes, types));
// 查询触发警戒库存的商品数量
counts.put(ProductSpuPageReqVO.ALERT_STOCK,
productSpuMapper.selectCount());
productSpuMapper.selectCount(ProductSpuDO::getTypes, types));
// 查询回收站中的商品数量
counts.put(ProductSpuPageReqVO.RECYCLE_BIN,
productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()));
productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()
,ProductSpuDO::getTypes, types));
return counts;
}
@@ -1,5 +1,5 @@
server:
port: 48088
port: 8089
--- #################### 数据库相关配置 ####################
spring:
@@ -46,7 +46,7 @@ spring:
primary: master
datasource:
master:
url: jdbc:mysql://47.96.250.9:3306/ydsp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://121.40.41.196:3306/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
@@ -54,8 +54,8 @@ spring:
# url: jdbc:dm://127.0.0.1:5236?schema=RUOYI_VUE_PRO # DM 连接的示例
# url: jdbc:kingbase8://127.0.0.1:54321/test # 人大金仓 KingbaseES 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss 连接的示例
username: ydsp
password: KriJww38zmszYE3w
username: xr
password: zd5ecNxeXHZxkWs8
# username: sa # SQL Server 连接的示例
# password: Yudao@2024 # SQL Server 连接的示例
# username: SYSDBA # DM 连接的示例
@@ -64,9 +64,9 @@ spring:
# password: Yudao@2024 # OpenGauss 连接的示例
slave: # 模拟从库,可根据自己需要修改
lazy: true # 开启懒加载,保证启动速度
url: jdbc:mysql://47.96.250.9:3306/ydsp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: ydsp
password: KriJww38zmszYE3w
url: jdbc:mysql://121.40.41.196:3306/xr?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: xr
password: zd5ecNxeXHZxkWs8
# tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!)
# url: jdbc:TAOS-RS://127.0.0.1:6041/ruoyi_vue_pro
# driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
@@ -72,7 +72,7 @@ spring:
host: 127.0.0.1 # 地址
port: 6379 # 端口
database: 2 # 数据库索引
password: 123456 # 密码,建议生产环境开启
password: 8mbsc1fRj # 密码,建议生产环境开启
--- #################### 定时任务相关配置 ####################