Commit e78193c1 by 陈文顺

数据字典完成

parent 4f38f52c
...@@ -10,6 +10,7 @@ import com.freemud.demo.util.RedisCache; ...@@ -10,6 +10,7 @@ import com.freemud.demo.util.RedisCache;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
......
package com.freemud.demo.cache;
import com.freemud.demo.dto.DictDataDto;
import com.freemud.demo.mapper.TDictDataMapper;
import com.freemud.demo.mapper.TDictTypeMapper;
import com.freemud.demo.model.TDictData;
import com.freemud.demo.util.RedisHashCache;
import com.google.common.collect.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Created by chenwenshun on 2018/11/27.
*/
@Component
public class DictRedisHashCache extends RedisHashCache<DictDataDto>{
@Autowired
TDictTypeMapper dictTypeMapper;
@Autowired
TDictDataMapper dictDataMapper;
@Override
public Map<String, DictDataDto> searchDB(Object key) {
String typeCd = key.toString();
List<TDictData> dictDataList = dictDataMapper.loadDatasByTypeCd(typeCd);
if (dictDataList.isEmpty()){
return null;
}
List<DictDataDto> dictDataDtos = dictDataList.stream()
.map(d -> {
DictDataDto dictDataDto = new DictDataDto();
BeanUtils.copyProperties(d, dictDataDto);
return dictDataDto;
})
.collect(Collectors.toList());
return dictDataDtos.stream()
.collect(Collectors.toMap(d->d.getDictCd(),d -> d));
}
@Override
public int getExprie() {
return 24;
}
}
...@@ -30,7 +30,10 @@ import java.util.Map; ...@@ -30,7 +30,10 @@ import java.util.Map;
DictDataDto loadDictDataByCd(String dictTypeCd, String dictCd, boolean onlyEnable); DictDataDto loadDictDataByCd(String dictTypeCd, String dictCd, boolean onlyEnable);
/** 保存 */ /** 保存 */
TDictType saveDict(DictTypeDto dto); void saveDict(DictTypeDto dto);
void edit(DictTypeDto dto);
/** 批量保存字典列表 */ /** 批量保存字典列表 */
void saveDatas(List<DictDataDto> dictDataDtos); void saveDatas(List<DictDataDto> dictDataDtos);
......
package com.freemud.demo.service.impl; package com.freemud.demo.service.impl;
import com.freemud.demo.cache.DictRedisHashCache;
import com.freemud.demo.dto.DictDataDto; import com.freemud.demo.dto.DictDataDto;
import com.freemud.demo.dto.DictTypeDto; import com.freemud.demo.dto.DictTypeDto;
import com.freemud.demo.dto.PageData; import com.freemud.demo.dto.PageData;
...@@ -16,7 +17,10 @@ import com.google.common.collect.Lists; ...@@ -16,7 +17,10 @@ import com.google.common.collect.Lists;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -36,6 +40,9 @@ public class DictTypeServiceImpl implements IDictTypeService{ ...@@ -36,6 +40,9 @@ public class DictTypeServiceImpl implements IDictTypeService{
@Autowired @Autowired
DictRedisCache dictRedisCache; DictRedisCache dictRedisCache;
@Autowired
DictRedisHashCache dictRedisHashCache;
@Override @Override
public TDictType loadDictById(long dictTypeId) { public TDictType loadDictById(long dictTypeId) {
return null; return null;
...@@ -48,25 +55,79 @@ public class DictTypeServiceImpl implements IDictTypeService{ ...@@ -48,25 +55,79 @@ public class DictTypeServiceImpl implements IDictTypeService{
@Override @Override
public DictDataDto loadDictDataByCd(String dictTypeCd, String dictCd, boolean onlyEnable) { public DictDataDto loadDictDataByCd(String dictTypeCd, String dictCd, boolean onlyEnable) {
TDictData dictData = this.dictDataMapper.getDictDataByCd(dictTypeCd, dictCd); // TDictData dictData = this.dictDataMapper.getDictDataByCd(dictTypeCd, dictCd);
if (dictData == null){ // if (dictData == null){
return null; // return null;
} // }
DictDataDto dictDataDto = new DictDataDto(); DictDataDto dictDataDto = new DictDataDto();
BeanUtils.copyProperties(dictData, dictDataDto); // BeanUtils.copyProperties(dictData, dictDataDto);
if (onlyEnable ){ // if (onlyEnable ){
if (!dictData.getEnableFlg()){ // if (!dictData.getEnableFlg()){
return null; // return null;
} // }
} // }
dictDataDto = dictRedisHashCache.getValue(dictTypeCd,dictCd);
return dictDataDto; return dictDataDto;
} }
@Override @Override
public TDictType saveDict(DictTypeDto dto) { public void saveDict(DictTypeDto dto) {
return null; TDictType dictTypeEntity = new TDictType();
BeanUtils.copyProperties(dto,dictTypeEntity);
dictTypeEntity.setCreatedDate(new Date());
dictTypeEntity.setUpdatedDate(new Date());
this.dictTypeMapper.insertUseGeneratedKeys(dictTypeEntity);
// int r = this.dictTypeMapper.insertSelective(dictTypeEntity);
if (dto.getDictDataDtos()==null || dto.getDictDataDtos().isEmpty()){
return;
}
List<TDictData> dictDataList = dto.getDictDataDtos().stream()
.map(d -> {
TDictData dictDataEntity = new TDictData();
BeanUtils.copyProperties(d, dictDataEntity);
dictDataEntity.setDictTypeId(dictTypeEntity.getId());
return dictDataEntity;
})
.collect(Collectors.toList());
this.dictDataMapper.insertList(dictDataList);
}
@Override
public void edit(DictTypeDto dto){
TDictType dictType = this.dictTypeMapper.selectByPrimaryKey(dto.getId());
BeanUtils.copyProperties(dto,dictType);
dictType.setUpdatedDate(new Date());
dictTypeMapper.updateByPrimaryKey(dictType);
if (dto.getDictDataDtos()==null || dto.getDictDataDtos().isEmpty()){
return;
}
Example exampleDel = new Example(TDictData.class);
exampleDel.createCriteria()
.andEqualTo("dictTypeId",dto.getId());
dictDataMapper.deleteByExample(exampleDel);
List<TDictData> dictDataList = dto.getDictDataDtos().stream()
.map(d -> {
TDictData dictDataEntity = new TDictData();
BeanUtils.copyProperties(d, dictDataEntity);
dictDataEntity.setDictTypeId(dto.getId());
return dictDataEntity;
})
.collect(Collectors.toList());
this.dictDataMapper.insertList(dictDataList);
dictRedisCache.delCache(dto.getId());
dictRedisHashCache.delCache(dto.getDictTypeCd());
} }
@Override @Override
...@@ -95,7 +156,7 @@ public class DictTypeServiceImpl implements IDictTypeService{ ...@@ -95,7 +156,7 @@ public class DictTypeServiceImpl implements IDictTypeService{
List<DictTypeDto> list = page.stream() List<DictTypeDto> list = page.stream()
.map(id -> { .map(id -> {
DictTypeDto dictTypeDto = this.dictRedisCache.getCache(id,DictTypeDto.class); DictTypeDto dictTypeDto = this.dictRedisCache.getCache(id);
return dictTypeDto; return dictTypeDto;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -106,31 +167,33 @@ public class DictTypeServiceImpl implements IDictTypeService{ ...@@ -106,31 +167,33 @@ public class DictTypeServiceImpl implements IDictTypeService{
@Override @Override
public List<DictDataDto> loadDatasByTypeCd(String dictTypeCd, boolean onlyEnable) { public List<DictDataDto> loadDatasByTypeCd(String dictTypeCd, boolean onlyEnable) {
List<DictDataDto> dictDataDtos = Lists.newArrayList(); List<DictDataDto> dictDataDtos = Lists.newArrayList();
List<TDictData> dictDataList = this.dictDataMapper.loadDatasByTypeCd(dictTypeCd); // List<TDictData> dictDataList = this.dictDataMapper.loadDatasByTypeCd(dictTypeCd);
if (dictDataList.isEmpty()){ // if (dictDataList.isEmpty()){
return dictDataDtos; // return dictDataDtos;
} // }
if (onlyEnable){ // if (onlyEnable){
dictDataDtos = dictDataList.stream() // dictDataDtos = dictDataList.stream()
.filter(TDictData::getEnableFlg) // .filter(TDictData::getEnableFlg)
.map(d -> { // .map(d -> {
DictDataDto dictDataDto = new DictDataDto(); // DictDataDto dictDataDto = new DictDataDto();
BeanUtils.copyProperties(d, dictDataDto); // BeanUtils.copyProperties(d, dictDataDto);
return dictDataDto; // return dictDataDto;
}) // })
.collect(Collectors.toList()); // .collect(Collectors.toList());
//
}else { // }else {
dictDataDtos = dictDataList.stream() // dictDataDtos = dictDataList.stream()
.map(d -> { // .map(d -> {
DictDataDto dictDataDto = new DictDataDto(); // DictDataDto dictDataDto = new DictDataDto();
BeanUtils.copyProperties(d, dictDataDto); // BeanUtils.copyProperties(d, dictDataDto);
return dictDataDto; // return dictDataDto;
}) // })
.collect(Collectors.toList()); // .collect(Collectors.toList());
} // }
Map<String,DictDataDto> map = dictRedisHashCache.getAllValue(dictTypeCd);
dictDataDtos = new ArrayList<>(map.values());
return dictDataDtos; return dictDataDtos;
} }
......
...@@ -2,6 +2,8 @@ package com.freemud.demo.util; ...@@ -2,6 +2,8 @@ package com.freemud.demo.util;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -13,14 +15,22 @@ public abstract class RedisCache<T> { ...@@ -13,14 +15,22 @@ public abstract class RedisCache<T> {
@Autowired @Autowired
protected RedisUitl redisUitl; protected RedisUitl redisUitl;
public Class<T> getClazz(){
Type type = getClass().getGenericSuperclass();
Type trueType = ((ParameterizedType)type).getActualTypeArguments()[0];
return (Class<T>) trueType;
}
/** /**
* 获取缓存 * 获取缓存
* @param key * @param key
* @param clazz * @param clazz
* @return * @return
*/ */
public T getCache(Object key, Class<T> clazz){ public T getCache(Object key){
String redisKey = getRedisKey(clazz.getName(), key); String redisKey = getRedisKey(getClazz().getName(), key);
T value = redisUitl.get(redisKey); T value = redisUitl.get(redisKey);
if (value != null){ if (value != null){
return value; return value;
...@@ -50,7 +60,7 @@ public abstract class RedisCache<T> { ...@@ -50,7 +60,7 @@ public abstract class RedisCache<T> {
* 删除缓存 * 删除缓存
*/ */
public void delCache(Object key){ public void delCache(Object key){
redisUitl.getRedisTemplate().delete(key); redisUitl.getRedisTemplate().delete(getRedisKey(getClazz().getName(),key));
} }
......
package com.freemud.demo.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* Created by chenwenshun on 2018/9/4.
*/
public abstract class RedisHashCache<T> {
@Autowired
protected RedisTemplate redisTemplate;
public Class<T> getClazz(){
Type type = getClass().getGenericSuperclass();
Type trueType = ((ParameterizedType)type).getActualTypeArguments()[0];
return (Class<T>) trueType;
}
public <T> T getValue(Object key, Object filed){
T result = (T)redisTemplate.boundHashOps(getRedisKey(key)).get(filed);
if (result != null){
return result;
}
boolean hasKey = redisTemplate.hasKey(key);
if (hasKey){
return null;
}
Map map = this.searchDB(key);
if (map == null || map.size() == 0){
redisTemplate.boundHashOps(getRedisKey(key)).put("","");
}else {
redisTemplate.boundHashOps(getRedisKey(key)).putAll(map);
}
redisTemplate.expire(getRedisKey(key),getExprie(),TimeUnit.HOURS);
result = (T)redisTemplate.boundHashOps(getRedisKey(key)).get(filed);
return result;
}
public <T> Map<String,T> getAllValue(Object key){
Map<String,T> result = (Map<String,T>)redisTemplate.boundHashOps(getRedisKey(key)).entries();
if (result != null && result.size() > 0){
return result;
}
boolean hasKey = redisTemplate.hasKey(key);
if (hasKey){
return null;
}
Map map = this.searchDB(key);
if (map == null || map.size() == 0){
redisTemplate.boundHashOps(getRedisKey(key)).put("","");
}else {
redisTemplate.boundHashOps(getRedisKey(key)).putAll(map);
}
redisTemplate.expire(getRedisKey(key),getExprie(),TimeUnit.HOURS);
result = (Map<String,T>)redisTemplate.boundHashOps(getRedisKey(key)).entries();
return result;
}
/**
* 删除缓存
*/
public void delCache(Object key){
redisTemplate.delete(getRedisKey(key));
}
public abstract Map<String,T> searchDB(Object key);
public abstract int getExprie();
private String getRedisKey(Object key){
return this.getClazz().getName()+"_HASH_"+key.toString();
}
}
...@@ -51,11 +51,11 @@ ...@@ -51,11 +51,11 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <!--<dependency>-->
<groupId>cn.freemud.commons</groupId> <!--<groupId>cn.freemud.commons</groupId>-->
<artifactId>commons-base</artifactId> <!--<artifactId>commons-base</artifactId>-->
<version>1.4.9-release</version> <!--<version>1.4.9-release</version>-->
</dependency> <!--</dependency>-->
......
package com.freemud.springbootdemo.context;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* Created by chenwenshun on 2018/11/19.
*/
@Component
public class StartupRunner implements CommandLineRunner{
@Override
public void run(String... strings) throws Exception {
System.out.println(strings);
}
}
package com.freemud.springbootdemo.context;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
/**
* Created by chenwenshun on 2018/11/19.
*/
@Configuration
public class TaskRunner implements ApplicationRunner, Ordered{
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
System.out.println(applicationArguments);
}
@Override
public int getOrder() {
return 0;
}
}
...@@ -2,6 +2,7 @@ package com.freemud.springbootdemo.controller; ...@@ -2,6 +2,7 @@ package com.freemud.springbootdemo.controller;
import com.freemud.demo.dto.*; import com.freemud.demo.dto.*;
import com.freemud.demo.service.IDictTypeService; import com.freemud.demo.service.IDictTypeService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,6 +19,7 @@ public class DictController { ...@@ -18,6 +19,7 @@ public class DictController {
@Autowired @Autowired
IDictTypeService dictTypeService; IDictTypeService dictTypeService;
@ApiOperation("分页查询列表")
@PostMapping("/page") @PostMapping("/page")
public ResDto page(@RequestBody PageReq pageReq){ public ResDto page(@RequestBody PageReq pageReq){
PageData<DictTypeDto> pageData = dictTypeService.findPageDict(pageReq); PageData<DictTypeDto> pageData = dictTypeService.findPageDict(pageReq);
...@@ -26,6 +28,7 @@ public class DictController { ...@@ -26,6 +28,7 @@ public class DictController {
} }
@ApiOperation("typeCd获取字典数据")
@GetMapping( value = "/dictDatas/{dictTypeCd}") @GetMapping( value = "/dictDatas/{dictTypeCd}")
public ResDto dictDatas(@PathVariable String dictTypeCd){ public ResDto dictDatas(@PathVariable String dictTypeCd){
List<DictDataDto> list = this.dictTypeService.loadDatasByTypeCd(dictTypeCd,true); List<DictDataDto> list = this.dictTypeService.loadDatasByTypeCd(dictTypeCd,true);
...@@ -33,6 +36,7 @@ public class DictController { ...@@ -33,6 +36,7 @@ public class DictController {
} }
@ApiOperation("typeCd & dataCd获取字典数据")
@GetMapping("/dictData/{dictTypeCd}/{dictCd}") @GetMapping("/dictData/{dictTypeCd}/{dictCd}")
public ResDto<DictDataDto> dictData(@PathVariable String dictTypeCd ,@PathVariable String dictCd){ public ResDto<DictDataDto> dictData(@PathVariable String dictTypeCd ,@PathVariable String dictCd){
DictDataDto dictDataDto = this.dictTypeService.loadDictDataByCd(dictTypeCd,dictCd,true); DictDataDto dictDataDto = this.dictTypeService.loadDictDataByCd(dictTypeCd,dictCd,true);
...@@ -40,4 +44,19 @@ public class DictController { ...@@ -40,4 +44,19 @@ public class DictController {
} }
@ApiOperation("新增字典信息")
@PostMapping("/save")
public ResDto save(@RequestBody DictTypeDto dict){
this.dictTypeService.saveDict(dict);
return new ResDto();
}
@ApiOperation("修改字典信息")
@PostMapping("/edit")
public ResDto edit(@RequestBody DictTypeDto dict){
this.dictTypeService.edit(dict);
return new ResDto();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment