controller层
package cn.tedu.yygh.cmn.controller;
import cn.tedu.yygh.cmn.service.DictService;
import cn.tedu.yygh.common.result.Result;
import cn.tedu.yygh.model.cmn.Dict;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
@RequestMapping("/admin/cmn/dict")
@CrossOrigin
public class DictController {
@Autowired
private DictService dictService;
//导入数据字典接口
@PostMapping("importData")
public Result importData(MultipartFile file){
dictService.importData(file);
return Result.ok();
}
//导出数据字典接口
@GetMapping("exportData")
public Result exportData(HttpServletResponse response){
dictService.exportData(response);
return Result.ok();
}
//根据数据id查询子数据列表
@GetMapping("/findChildData/{id}")
public Result findChildData(@PathVariable Integer id){
List<Dict> list = dictService.findChildData(id);
return Result.ok(list);
}
}
ServiceImpl
package cn.tedu.yygh.cmn.service.impl;
import cn.tedu.yygh.cmn.listener.DictListener;
import cn.tedu.yygh.cmn.mapper.DictMapper;
import cn.tedu.yygh.cmn.service.DictService;
import cn.tedu.yygh.model.cmn.Dict;
import cn.tedu.yygh.vo.cmn.DictEeVo;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Service
public class DictServiceImpl implements DictService {
@Autowired
private DictMapper dictMapper;
@Override
public List<Dict> findChildData(Integer id) {
QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id", id);
List<Dict> dictList = dictMapper.selectList(queryWrapper);
for(Dict dict : dictList){
Long dictId = dict.getId();
boolean isChild = this.isChildren(dictId);
dict.setHasChildren(isChild);
}
return dictList;
}
//导出数据字典接口
@Override
public void exportData(HttpServletResponse response) {
//设置下载信息
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = "dict";
response.setHeader("Content-disposition","attachment:filename="+fileName+".xlsx");
//查询数据库
List<Dict> dictList = dictMapper.selectList(null);
//Dict --> DictEeVo
List<DictEeVo> dictEeVoList = new ArrayList<>();
for (Dict dict : dictList){
DictEeVo dictEeVo = new DictEeVo();
BeanUtils.copyProperties(dict,dictEeVo);
dictEeVoList.add(dictEeVo);
}
//调用方法进行写操作
try {
EasyExcel.write(response.getOutputStream(), DictEeVo.class).sheet("dict").doWrite(dictEeVoList);
} catch (IOException e) {
e.printStackTrace();
}
}
//导入数据字典接口
@Override
public void importData(MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(),DictEeVo.class,new DictListener(dictMapper)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}
//判断id下面是否有子数据
private boolean isChildren(Long id){
QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id", id);
Integer count = dictMapper.selectCount(queryWrapper);
return count>0;
}
}
导入 监听器Listener设置
package cn.tedu.yygh.cmn.listener;
import cn.tedu.yygh.cmn.mapper.DictMapper;
import cn.tedu.yygh.model.cmn.Dict;
import cn.tedu.yygh.vo.cmn.DictEeVo;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.springframework.beans.BeanUtils;
public class DictListener extends AnalysisEventListener<DictEeVo> {
private DictMapper dictMapper;
public DictListener(DictMapper dictMapper){
this.dictMapper = dictMapper;
}
//一行一行读取
@Override
public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
Dict dict = new Dict();
BeanUtils.copyProperties(dictEeVo,dict);
dictMapper.insert(dict);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}