mirror of https://gitee.com/stylefeng/roses
Merge branch 'master' into dev-websocket
commit
6f1262cf75
|
@ -33,4 +33,23 @@ public interface TranslationApi {
|
|||
*/
|
||||
Map<String, String> getTranslationDictByLanguage(TranslationEnum translationLanguages);
|
||||
|
||||
/**
|
||||
* 添加一个翻译项到context
|
||||
*
|
||||
* @param translationDict 具体的翻译项
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 21:47
|
||||
*/
|
||||
void addTranslationDict(TranslationDict translationDict);
|
||||
|
||||
/**
|
||||
* 删除某条翻译记录
|
||||
*
|
||||
* @param translationLanguages 语种枚举
|
||||
* @param tranCode 具体翻译项编码
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 21:59
|
||||
*/
|
||||
void deleteTranslationDict(TranslationEnum translationLanguages, String tranCode);
|
||||
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ public class TranslationContext {
|
|||
* @author fengshuonan
|
||||
* @date 2021/1/24 19:06
|
||||
*/
|
||||
public TranslationApi me() {
|
||||
public static TranslationApi me() {
|
||||
return SpringUtil.getBean(TranslationApi.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,16 +60,14 @@ public enum TranslationEnum {
|
|||
* @date 2019/10/18 10:33
|
||||
*/
|
||||
public static TranslationEnum valueOf(Integer value) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
} else {
|
||||
if (value != null) {
|
||||
for (TranslationEnum translationLanguages : TranslationEnum.values()) {
|
||||
if (translationLanguages.getCode().equals(value)) {
|
||||
return translationLanguages;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,9 +15,9 @@ import lombok.Getter;
|
|||
public enum TranslationExceptionEnum implements AbstractExceptionEnum {
|
||||
|
||||
/**
|
||||
* 多语言xx
|
||||
* 多语言记录不存在
|
||||
*/
|
||||
JWT_PARSE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + TranslationConstants.I18N_EXCEPTION_STEP_CODE + "01", "jwt解析错误!jwt为:{}");
|
||||
NOT_EXISTED(RuleConstants.BUSINESS_ERROR_TYPE_CODE + TranslationConstants.I18N_EXCEPTION_STEP_CODE + "01", "多语言记录不存在,id为:{}");
|
||||
|
||||
/**
|
||||
* 错误编码
|
||||
|
|
|
@ -34,7 +34,7 @@ public class TranslationRequest extends BaseRequest {
|
|||
/**
|
||||
* 1:中文 2:英语
|
||||
*/
|
||||
private Integer languages;
|
||||
private Integer language;
|
||||
|
||||
/**
|
||||
* 翻译的值
|
||||
|
|
|
@ -42,8 +42,8 @@ public class Translation extends BaseEntity {
|
|||
/**
|
||||
* 1:中文 2:英语
|
||||
*/
|
||||
@TableField("languages")
|
||||
private Integer languages;
|
||||
@TableField("language")
|
||||
private Integer language;
|
||||
|
||||
/**
|
||||
* 翻译的值
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
package cn.stylefeng.roses.kernel.i18n.modular.factory;
|
||||
|
||||
import cn.stylefeng.roses.kernel.i18n.api.enums.TranslationEnum;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.pojo.TranslationDict;
|
||||
import cn.stylefeng.roses.kernel.i18n.modular.entity.Translation;
|
||||
|
||||
/**
|
||||
* 创建翻译字典
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 21:50
|
||||
*/
|
||||
public class TranslationDictFactory {
|
||||
|
||||
/**
|
||||
* 创建翻译字典
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 21:50
|
||||
*/
|
||||
public static TranslationDict createTranslationDict(TranslationEnum translationEnum, Translation translation) {
|
||||
TranslationDict translationDict = new TranslationDict();
|
||||
translationDict.setTranName(translation.getTranName());
|
||||
translationDict.setTranCode(translation.getTranCode());
|
||||
translationDict.setTranValue(translation.getTranValue());
|
||||
translationDict.setTranslationLanguages(translationEnum);
|
||||
return translationDict;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,14 +1,26 @@
|
|||
package cn.stylefeng.roses.kernel.i18n.modular.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.context.TranslationContext;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.enums.TranslationEnum;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.exception.TranslationException;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.exception.enums.TranslationExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.pojo.TranslationDict;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.pojo.request.TranslationRequest;
|
||||
import cn.stylefeng.roses.kernel.i18n.modular.entity.Translation;
|
||||
import cn.stylefeng.roses.kernel.i18n.modular.factory.TranslationDictFactory;
|
||||
import cn.stylefeng.roses.kernel.i18n.modular.mapper.TranslationMapper;
|
||||
import cn.stylefeng.roses.kernel.i18n.modular.service.TranslationService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -23,31 +35,115 @@ public class TranslationServiceImpl extends ServiceImpl<TranslationMapper, Trans
|
|||
@Override
|
||||
public void add(TranslationRequest param) {
|
||||
|
||||
// 1.构造实体
|
||||
Translation translation = new Translation();
|
||||
BeanUtil.copyProperties(param, translation);
|
||||
|
||||
// 2.保存到库中
|
||||
this.save(translation);
|
||||
|
||||
// 3.添加对应context
|
||||
TranslationEnum translationEnum = TranslationEnum.valueOf(param.getLanguage());
|
||||
TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation);
|
||||
TranslationContext.me().addTranslationDict(translationDict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(TranslationRequest param) {
|
||||
|
||||
// 1.根据id获取信息
|
||||
Translation translation = this.queryTranslation(param);
|
||||
|
||||
// 2.请求参数转化为实体
|
||||
BeanUtil.copyProperties(param, translation);
|
||||
|
||||
// 3.更新记录
|
||||
this.updateById(translation);
|
||||
|
||||
// 4.更新对应常量context
|
||||
TranslationEnum translationEnum = TranslationEnum.valueOf(param.getLanguage());
|
||||
TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation);
|
||||
TranslationContext.me().addTranslationDict(translationDict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(TranslationRequest param) {
|
||||
|
||||
// 1.根据id获取实体
|
||||
Translation translation = this.queryTranslation(param);
|
||||
|
||||
// 2.删除该记录
|
||||
this.removeById(param.getTranId());
|
||||
|
||||
// 3.删除对应context
|
||||
TranslationEnum translationEnum = TranslationEnum.valueOf(translation.getLanguage());
|
||||
TranslationContext.me().deleteTranslationDict(translationEnum, translation.getTranCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Translation findDetail(TranslationRequest param) {
|
||||
return null;
|
||||
return queryTranslation(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<Translation> findPage(TranslationRequest param) {
|
||||
return null;
|
||||
LambdaQueryWrapper<Translation> wrapper = createWrapper(param);
|
||||
Page<Translation> page = this.page(PageFactory.defaultPage(), wrapper);
|
||||
return PageResultFactory.createPageResult(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TranslationDict> getAllTranslationDict() {
|
||||
return null;
|
||||
List<Translation> list = this.list();
|
||||
ArrayList<TranslationDict> translationDictList = new ArrayList<>();
|
||||
for (Translation translation : list) {
|
||||
TranslationEnum translationEnum = TranslationEnum.valueOf(translation.getLanguage());
|
||||
TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation);
|
||||
translationDictList.add(translationDict);
|
||||
}
|
||||
return translationDictList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典项的对象
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 21:54
|
||||
*/
|
||||
private Translation queryTranslation(TranslationRequest param) {
|
||||
Translation translation = this.getById(param.getTranId());
|
||||
if (ObjectUtil.isEmpty(translation)) {
|
||||
throw new TranslationException(TranslationExceptionEnum.NOT_EXISTED, param.getTranId());
|
||||
}
|
||||
return translation;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建多语言的wrapper
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 22:03
|
||||
*/
|
||||
private LambdaQueryWrapper<Translation> createWrapper(TranslationRequest param) {
|
||||
LambdaQueryWrapper<Translation> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
if (ObjectUtil.isNotNull(param)) {
|
||||
|
||||
// 如果编码不为空,则带上名称搜素搜条件
|
||||
if (ObjectUtil.isNotEmpty(param.getTranCode())) {
|
||||
queryWrapper.like(Translation::getTranCode, param.getTranCode());
|
||||
}
|
||||
|
||||
// 如果翻译名称不为空,则带上翻译名称
|
||||
if (ObjectUtil.isNotEmpty(param.getTranName())) {
|
||||
queryWrapper.eq(Translation::getTranName, param.getTranName());
|
||||
}
|
||||
}
|
||||
|
||||
// 按时间倒序
|
||||
queryWrapper.orderByDesc(Translation::getCreateTime);
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -46,4 +46,29 @@ public class TranslationContainer implements TranslationApi {
|
|||
return TRAN_DICT_CONTAINER.get(translationLanguages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTranslationDict(TranslationDict translationDict) {
|
||||
TranslationEnum translationLanguages = translationDict.getTranslationLanguages();
|
||||
|
||||
Map<String, String> languageDict = TRAN_DICT_CONTAINER.get(translationLanguages);
|
||||
if (languageDict == null) {
|
||||
languageDict = new HashMap<>();
|
||||
}
|
||||
languageDict.put(translationDict.getTranCode(), translationDict.getTranValue());
|
||||
|
||||
TRAN_DICT_CONTAINER.put(translationLanguages, languageDict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteTranslationDict(TranslationEnum translationLanguages, String tranCode) {
|
||||
Map<String, String> languageDict = TRAN_DICT_CONTAINER.get(translationLanguages);
|
||||
|
||||
if (languageDict == null) {
|
||||
return;
|
||||
}
|
||||
languageDict.remove(tranCode);
|
||||
|
||||
TRAN_DICT_CONTAINER.put(translationLanguages, languageDict);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import cn.stylefeng.roses.kernel.i18n.api.TranslationApi;
|
|||
import cn.stylefeng.roses.kernel.i18n.api.TranslationPersistenceApi;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.pojo.TranslationDict;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.context.event.ApplicationContextInitializedEvent;
|
||||
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -19,10 +19,10 @@ import java.util.List;
|
|||
* @date 2021/1/24 19:36
|
||||
*/
|
||||
@Slf4j
|
||||
public class TranslationDictInitListener implements ApplicationListener<ApplicationContextInitializedEvent> {
|
||||
public class TranslationDictInitListener implements ApplicationListener<ApplicationStartedEvent> {
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationContextInitializedEvent applicationContextInitializedEvent) {
|
||||
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
|
||||
|
||||
TranslationPersistenceApi tanTranslationPersistenceApi = SpringUtil.getBean(TranslationPersistenceApi.class);
|
||||
TranslationApi translationApi = SpringUtil.getBean(TranslationApi.class);
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
|
||||
<dependencies>
|
||||
|
||||
<!--多语言的sdk-->
|
||||
<!--多语言的业务模块-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>i18n-sdk</artifactId>
|
||||
<artifactId>i18n-business</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package cn.stylefeng.roses.kernel.i18n.starter;
|
||||
|
||||
import cn.stylefeng.roses.kernel.i18n.TranslationContainer;
|
||||
import cn.stylefeng.roses.kernel.i18n.api.TranslationApi;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
|
@ -11,4 +14,15 @@ import org.springframework.context.annotation.Configuration;
|
|||
@Configuration
|
||||
public class GunsTranslationAutoConfiguration {
|
||||
|
||||
/**
|
||||
* 多语言翻译条目存放容器
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/24 19:42
|
||||
*/
|
||||
@Bean
|
||||
public TranslationApi translationApi() {
|
||||
return new TranslationContainer();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,4 +23,10 @@ public interface DictConstants {
|
|||
*/
|
||||
Long DEFAULT_DICT_PARENT_ID = -1L;
|
||||
|
||||
|
||||
/**
|
||||
* 系统配置分组code
|
||||
*/
|
||||
String CONFIG_GROUP_DICT_TYPE_CODE = "config_group";
|
||||
|
||||
}
|
|
@ -20,6 +20,8 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.stylefeng.roses.kernel.dict.api.constants.DictConstants.CONFIG_GROUP_DICT_TYPE_CODE;
|
||||
|
||||
/**
|
||||
* 字典详情管理,具体管理某个字典类型下的条目
|
||||
*
|
||||
|
@ -131,6 +133,19 @@ public class DictController {
|
|||
return new SuccessResponseData(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统配置分组字典列表(分页)
|
||||
*
|
||||
* @author chenjinlong
|
||||
* @date 2021/1/25 11:47
|
||||
*/
|
||||
@GetResource(name = "获取系统配置分组字典列表", path = "/dict/getConfigGroupPage", requiredPermission = false)
|
||||
public ResponseData getConfigGroupPage(DictRequest dictRequest) {
|
||||
dictRequest.setDictTypeCode(CONFIG_GROUP_DICT_TYPE_CODE);
|
||||
PageResult<SysDict> page = this.dictService.findPageList(dictRequest);
|
||||
return new SuccessResponseData(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取树形字典列表
|
||||
*
|
||||
|
|
|
@ -92,6 +92,19 @@ public class DictTypeController {
|
|||
return new SuccessResponseData(detail);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取字典类型详情
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/13 11:25
|
||||
*/
|
||||
@GetResource(name = "获取字典类型详情", path = "/dictType/getConfigDictTypeDetail", requiredPermission = false)
|
||||
public ResponseData getConfigDictTypeDetail() {
|
||||
SysDictType detail = this.dictTypeService.getConfigDictTypeDetail();
|
||||
return new SuccessResponseData(detail);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典类型列表
|
||||
*
|
||||
|
|
|
@ -91,4 +91,11 @@ public interface DictTypeService extends IService<SysDictType> {
|
|||
*/
|
||||
SysDictType findDetail(Long dictTypeId);
|
||||
|
||||
/**
|
||||
* 获取字典详情
|
||||
*
|
||||
* @author huangyao
|
||||
* @date 2021/1/10 17:27
|
||||
*/
|
||||
SysDictType getConfigDictTypeDetail();
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.stylefeng.roses.kernel.dict.api.constants.DictConstants.CONFIG_GROUP_DICT_TYPE_CODE;
|
||||
|
||||
/**
|
||||
* 字典类型表 服务实现类
|
||||
*
|
||||
|
@ -175,6 +177,13 @@ public class DictTypeServiceImpl extends ServiceImpl<DictTypeMapper, SysDictType
|
|||
return this.baseMapper.findDetail(dictTypeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysDictType getConfigDictTypeDetail() {
|
||||
LambdaQueryWrapper<SysDictType> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysDictType::getDictTypeCode, CONFIG_GROUP_DICT_TYPE_CODE);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验dictTypeClass是否是系统字典,如果是系统字典只能超级管理员操作
|
||||
*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.user.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.system.exception.SystemModularException;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserOrg;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.mapper.SysUserOrgMapper;
|
||||
|
@ -68,14 +69,10 @@ public class SysUserOrgServiceServiceImpl extends ServiceImpl<SysUserOrgMapper,
|
|||
|
||||
@Override
|
||||
public Boolean getUserOrgFlag(Long orgId, Long positionId) {
|
||||
|
||||
// TODO 测试
|
||||
LambdaQueryWrapper<SysUserOrg> sysUserOrgLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysUserOrgLambdaQueryWrapper.eq(true, SysUserOrg::getOrgId, orgId);
|
||||
sysUserOrgLambdaQueryWrapper.eq(true, SysUserOrg::getPositionId, positionId);
|
||||
|
||||
List<SysUserOrg> list = this.list(sysUserOrgLambdaQueryWrapper);
|
||||
return list.size() > 0;
|
||||
LambdaQueryWrapper<SysUserOrg> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ObjectUtil.isNotNull(orgId), SysUserOrg::getOrgId, orgId);
|
||||
queryWrapper.eq(ObjectUtil.isNotNull(positionId), SysUserOrg::getPositionId, positionId);
|
||||
return this.list(queryWrapper).size() > 0;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue