feat(新增): 🔧 多语言修改
This commit is contained in:
parent
c1d4eb235e
commit
e817494645
|
@ -22,7 +22,7 @@ public class MybatisPlusConfig {
|
||||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||||
// 分页插件
|
// 分页插件
|
||||||
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
|
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
|
||||||
paginationInnerInterceptor.setMaxLimit(100L);// ? 设置最大分页为100
|
paginationInnerInterceptor.setMaxLimit(600L);// ? 设置最大分页为100
|
||||||
interceptor.addInnerInterceptor(paginationInnerInterceptor);
|
interceptor.addInnerInterceptor(paginationInnerInterceptor);
|
||||||
// 乐观锁
|
// 乐观锁
|
||||||
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
|
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
|
||||||
|
|
|
@ -34,8 +34,16 @@ public class GlobalExceptionHandler {
|
||||||
@ExceptionHandler(RuntimeException.class)
|
@ExceptionHandler(RuntimeException.class)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Result<Object> exceptionHandler(RuntimeException exception) {
|
public Result<Object> exceptionHandler(RuntimeException exception) {
|
||||||
log.error("GlobalExceptionHandler===>运行时异常信息:{}", exception.getMessage());
|
String message = exception.getMessage();
|
||||||
|
log.error("GlobalExceptionHandler===>运行时异常信息:{}", message);
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
|
|
||||||
|
// 解析异常
|
||||||
|
String jsonParseError = "JSON parse error (.*)";
|
||||||
|
Matcher jsonParseErrorMatcher = Pattern.compile(jsonParseError).matcher(message);
|
||||||
|
if (jsonParseErrorMatcher.find())
|
||||||
|
return Result.error(null, 500, "JSON解析异常 " + jsonParseErrorMatcher.group(1));
|
||||||
|
|
||||||
return Result.error(null, 500, "服务器异常");
|
return Result.error(null, 500, "服务器异常");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,9 @@ public class I18nAddDto {
|
||||||
@NotBlank(message = "多语言翻译名称不能为空")
|
@NotBlank(message = "多语言翻译名称不能为空")
|
||||||
private String translation;
|
private String translation;
|
||||||
|
|
||||||
@Schema(name = "typeId", title = "多语言类型id")
|
@Schema(name = "typeName", title = "多语言类型名称")
|
||||||
private Long typeId;
|
@NotBlank(message = "多语言类型名称不能为空")
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,5 +19,8 @@ public class I18nDto {
|
||||||
@Schema(name = "translation", title = "多语言翻译名称")
|
@Schema(name = "translation", title = "多语言翻译名称")
|
||||||
private String translation;
|
private String translation;
|
||||||
|
|
||||||
|
@Schema(name = "typeName", title = "多语言类型名称")
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class I18n extends BaseEntity {
|
||||||
@Schema(name = "translation", title = "多语言翻译名称")
|
@Schema(name = "translation", title = "多语言翻译名称")
|
||||||
private String translation;
|
private String translation;
|
||||||
|
|
||||||
@Schema(name = "typeId", title = "多语言类型id")
|
@Schema(name = "typeName", title = "多语言类型id")
|
||||||
private Long typeId;
|
private String typeName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
package cn.bunny.dao.entity.i18n;
|
|
||||||
|
|
||||||
import cn.bunny.dao.entity.BaseEntity;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@Accessors(chain = true)
|
|
||||||
@TableName("sys_i18n")
|
|
||||||
@Schema(name = "I18nWithI18nType对象", title = "多语言和多语言类型", description = "多语言和多语言类型内容")
|
|
||||||
public class I18nWithI18nType extends BaseEntity {
|
|
||||||
|
|
||||||
@Schema(name = "keyName", title = "多语言key")
|
|
||||||
private String keyName;
|
|
||||||
|
|
||||||
@Schema(name = "translation", title = "多语言翻译名称")
|
|
||||||
private String translation;
|
|
||||||
|
|
||||||
@Schema(name = "typeName", title = "多语言类型(比如zh,en)")
|
|
||||||
private String typeName;
|
|
||||||
|
|
||||||
@Schema(name = "summary", title = "名称解释(比如中文,英文)")
|
|
||||||
private String summary;
|
|
||||||
|
|
||||||
}
|
|
|
@ -31,6 +31,7 @@ public enum ResultCodeEnum {
|
||||||
EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
|
EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
|
||||||
DATA_EXIST(201, "数据已存在"),
|
DATA_EXIST(201, "数据已存在"),
|
||||||
DATA_NOT_EXIST(201, "数据不存在"),
|
DATA_NOT_EXIST(201, "数据不存在"),
|
||||||
|
REQUEST_IS_EMPTY(201, "请求数据为空"),
|
||||||
|
|
||||||
// 数据相关 206
|
// 数据相关 206
|
||||||
ILLEGAL_REQUEST(206, "非法请求"),
|
ILLEGAL_REQUEST(206, "非法请求"),
|
||||||
|
|
|
@ -18,8 +18,8 @@ public class I18nVo extends BaseVo {
|
||||||
@Schema(name = "translation", title = "多语言翻译名称")
|
@Schema(name = "translation", title = "多语言翻译名称")
|
||||||
private String translation;
|
private String translation;
|
||||||
|
|
||||||
@Schema(name = "typeId", title = "多语言类型id")
|
@Schema(name = "typeName", title = "多语言类型id")
|
||||||
private Long typeId;
|
private String typeName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ package cn.bunny.services.mapper;
|
||||||
|
|
||||||
import cn.bunny.dao.dto.i18n.I18nDto;
|
import cn.bunny.dao.dto.i18n.I18nDto;
|
||||||
import cn.bunny.dao.entity.i18n.I18n;
|
import cn.bunny.dao.entity.i18n.I18n;
|
||||||
import cn.bunny.dao.entity.i18n.I18nWithI18nType;
|
|
||||||
import cn.bunny.dao.entity.system.MenuIcon;
|
import cn.bunny.dao.entity.system.MenuIcon;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
@ -23,13 +22,6 @@ import java.util.List;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface I18nMapper extends BaseMapper<I18n> {
|
public interface I18nMapper extends BaseMapper<I18n> {
|
||||||
|
|
||||||
/**
|
|
||||||
* * 多语言和多语言类型
|
|
||||||
*
|
|
||||||
* @return 多语言和多语言类型列表
|
|
||||||
*/
|
|
||||||
List<I18nWithI18nType> selectListWithI18nType();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * 分页查询多语言内容
|
* * 分页查询多语言内容
|
||||||
*
|
*
|
||||||
|
|
|
@ -6,7 +6,6 @@ import cn.bunny.dao.dto.i18n.I18nDto;
|
||||||
import cn.bunny.dao.dto.i18n.I18nUpdateDto;
|
import cn.bunny.dao.dto.i18n.I18nUpdateDto;
|
||||||
import cn.bunny.dao.entity.i18n.I18n;
|
import cn.bunny.dao.entity.i18n.I18n;
|
||||||
import cn.bunny.dao.entity.i18n.I18nType;
|
import cn.bunny.dao.entity.i18n.I18nType;
|
||||||
import cn.bunny.dao.entity.i18n.I18nWithI18nType;
|
|
||||||
import cn.bunny.dao.entity.system.MenuIcon;
|
import cn.bunny.dao.entity.system.MenuIcon;
|
||||||
import cn.bunny.dao.pojo.result.PageResult;
|
import cn.bunny.dao.pojo.result.PageResult;
|
||||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
||||||
|
@ -54,17 +53,13 @@ public class I18nServiceImpl extends ServiceImpl<I18nMapper, I18n> implements I1
|
||||||
public HashMap<String, Object> getI18n() {
|
public HashMap<String, Object> getI18n() {
|
||||||
// 查找默认语言内容
|
// 查找默认语言内容
|
||||||
I18nType i18nType = i18nTypeMapper.selectOne(Wrappers.<I18nType>lambdaQuery().eq(I18nType::getIsDefault, true));
|
I18nType i18nType = i18nTypeMapper.selectOne(Wrappers.<I18nType>lambdaQuery().eq(I18nType::getIsDefault, true));
|
||||||
List<I18nWithI18nType> i18nWithI18nTypes = baseMapper.selectListWithI18nType();
|
List<I18n> i18nList = list();
|
||||||
|
|
||||||
// 整理集合
|
// 整理集合
|
||||||
Map<String, Map<String, String>> map = i18nWithI18nTypes.stream()
|
Map<String, Map<String, String>> map = i18nList.stream()
|
||||||
.collect(Collectors.groupingBy(
|
.collect(Collectors.groupingBy(
|
||||||
I18nWithI18nType::getTypeName,
|
I18n::getTypeName,
|
||||||
Collectors.toMap(
|
Collectors.toMap(I18n::getKeyName, I18n::getTranslation)));
|
||||||
I18nWithI18nType::getKeyName,
|
|
||||||
I18nWithI18nType::getTranslation
|
|
||||||
)
|
|
||||||
));
|
|
||||||
|
|
||||||
// 返回集合
|
// 返回集合
|
||||||
HashMap<String, Object> hashMap = new HashMap<>(map);
|
HashMap<String, Object> hashMap = new HashMap<>(map);
|
||||||
|
@ -102,10 +97,10 @@ public class I18nServiceImpl extends ServiceImpl<I18nMapper, I18n> implements I1
|
||||||
@Override
|
@Override
|
||||||
public void addI18n(@Valid I18nAddDto dto) {
|
public void addI18n(@Valid I18nAddDto dto) {
|
||||||
String keyName = dto.getKeyName();
|
String keyName = dto.getKeyName();
|
||||||
Long typeId = dto.getTypeId();
|
String typeName = dto.getTypeName();
|
||||||
|
|
||||||
// 查询数据是否存在
|
// 查询数据是否存在
|
||||||
List<I18n> i18nList = list(Wrappers.<I18n>lambdaQuery().eq(I18n::getKeyName, keyName).eq(I18n::getTypeId, typeId));
|
List<I18n> i18nList = list(Wrappers.<I18n>lambdaQuery().eq(I18n::getKeyName, keyName).eq(I18n::getTypeName, typeName));
|
||||||
if (!i18nList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_EXIST);
|
if (!i18nList.isEmpty()) throw new BunnyException(ResultCodeEnum.DATA_EXIST);
|
||||||
|
|
||||||
// 保存内容
|
// 保存内容
|
||||||
|
@ -140,6 +135,9 @@ public class I18nServiceImpl extends ServiceImpl<I18nMapper, I18n> implements I1
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void deleteI18n(List<Long> ids) {
|
public void deleteI18n(List<Long> ids) {
|
||||||
|
if (ids.isEmpty()) {
|
||||||
|
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||||
|
}
|
||||||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,12 @@ spring:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
rabbitmq:
|
# rabbitmq:
|
||||||
host: ${bunny.rabbitmq.host}
|
# host: ${bunny.rabbitmq.host}
|
||||||
port: ${bunny.rabbitmq.port}
|
# port: ${bunny.rabbitmq.port}
|
||||||
username: ${bunny.rabbitmq.username}
|
# username: ${bunny.rabbitmq.username}
|
||||||
password: ${bunny.rabbitmq.password}
|
# password: ${bunny.rabbitmq.password}
|
||||||
virtual-host: ${bunny.rabbitmq.virtual-host}
|
# virtual-host: ${bunny.rabbitmq.virtual-host}
|
||||||
# publisher-confirm-type: correlated # 交换机确认
|
# publisher-confirm-type: correlated # 交换机确认
|
||||||
# publisher-returns: true # 队列确认
|
# publisher-returns: true # 队列确认
|
||||||
# listener:
|
# listener:
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<id column="id" property="id"/>
|
<id column="id" property="id"/>
|
||||||
<result column="key_name" property="keyName"/>
|
<result column="key_name" property="keyName"/>
|
||||||
<result column="translation" property="translation"/>
|
<result column="translation" property="translation"/>
|
||||||
<result column="type_id" property="typeId"/>
|
<result column="type_name" property="typeName"/>
|
||||||
<result column="create_user" property="createUser"/>
|
<result column="create_user" property="createUser"/>
|
||||||
<result column="update_user" property="updateUser"/>
|
<result column="update_user" property="updateUser"/>
|
||||||
<result column="update_time" property="updateTime"/>
|
<result column="update_time" property="updateTime"/>
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
<!-- 通用查询结果列 -->
|
<!-- 通用查询结果列 -->
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, key_name, translation, type_id, create_user, update_user, update_time, create_time, is_deleted
|
id, key_name, translation, type_name, create_user, update_user, update_time, create_time, is_deleted
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 物理删除多语言 -->
|
<!-- 物理删除多语言 -->
|
||||||
|
@ -30,24 +30,23 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 多语言和多语言类型 -->
|
|
||||||
<select id="selectListWithI18nType" resultType="cn.bunny.dao.entity.i18n.I18nWithI18nType">
|
|
||||||
select i18n.*, i18n_type.type_name
|
|
||||||
from sys_i18n i18n,
|
|
||||||
sys_i18n_type i18n_type
|
|
||||||
where i18n.type_id = i18n_type.id
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!-- 分页查询多语言内容 -->
|
<!-- 分页查询多语言内容 -->
|
||||||
<select id="selectListByPage" resultType="cn.bunny.dao.entity.i18n.I18n">
|
<select id="selectListByPage" resultType="cn.bunny.dao.entity.i18n.I18n">
|
||||||
select *
|
select
|
||||||
|
<include refid="Base_Column_List"/>
|
||||||
from sys_i18n
|
from sys_i18n
|
||||||
<if test="dto.keyName != null and dto.keyName != ''">
|
<where>
|
||||||
key_name like CONCAT('%',#{dto.keyName},'%')
|
<if test="dto.keyName != null and dto.keyName != ''">
|
||||||
</if>
|
key_name like CONCAT('%',#{dto.keyName},'%')
|
||||||
<if test="dto.translation != null and dto.translation != ''">
|
</if>
|
||||||
translation like CONCAT('%',#{dto.translation},'%')
|
<if test="dto.translation != null and dto.translation != ''">
|
||||||
</if>
|
translation like CONCAT('%',#{dto.translation},'%')
|
||||||
|
</if>
|
||||||
|
<if test="dto.typeName != null and dto.typeName != ''">
|
||||||
|
type_name like CONCAT('%',#{dto.typeName},'%')
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
order by update_time
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
Loading…
Reference in New Issue