package org.jeecg.modules.arj.controller;
import cn.hutool.core.io.IoUtil; //导包
import cn.hutool.poi.excel.ExcelReader; //导包
import cn.hutool.poi.excel.ExcelUtil; //导包
import cn.hutool.poi.excel.ExcelWriter; //导包
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; //导包
import com.baomidou.mybatisplus.core.metadata.IPage; //导包
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //导包
import org.jeecg.modules.arj.util.HttpResult;
import org.jeecg.modules.arj.service.SysMenuService;
import org.springframework.web.bind.annotation.*; //导包
import org.springframework.web.multipart.MultipartFile; //导包
import javax.annotation.Resource; //导包
import javax.servlet.ServletOutputStream; //导包
import javax.servlet.http.HttpServletResponse; //导包
import java.io.InputStream; //导包
import java.net.URLEncoder; //导包
import java.util.List; //导包
/*其中com.terra.arj.service就等于 com.example.demo.service,SysMenuService就等于SpiderdataSpiderxrmmwService*/
import org.jeecg.modules.arj.entity.SysMenu;
/*其中com.terra.arj.entity就等于com.example.demo.entity,SysMenu就等于SpiderdataSpiderxrmmw,一种Java的模板引擎语法*/
import org.springframework.web.bind.annotation.RestController;
/**
*
* 菜单管理 前端控制器
*
*
* @author hyy
* @since 2023-01-09
*/
@RestController
@RequestMapping("/menu")
public class SysMenuController {
@Resource
private SysMenuService sysMenuService; /*导Service的包,table.serviceName就是spiderdataSpiderxrmmwService,对应之前的如下内容
@Autowired
private SpiderdataSpiderxrmmwService spiderdataSpiderxrmmwService; //使用@Autowired引入spiderdataSpiderxrmmwService类*/
//新增和修改接口
@PostMapping("/save")
public boolean save(@RequestBody SysMenu sysMenu) {
//新增或者更新
return sysMenuService.saveOrUpdate(sysMenu);
}
//删除接口
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Integer id) {
return sysMenuService.removeById(id); //sysMenu 就等于spiderdataSpiderxrmmw,只是换成一个变量,变成活的,可以自动变更的
}
//查询所有内容接口
@GetMapping("/findNavTree")
public HttpResult findNavTree(@RequestParam String userName) {
return HttpResult.ok(sysMenuService.findTree(userName,1)); //返回查询到的所有数据
}
@GetMapping(value = "/findMenuTree")
public HttpResult findMenuTree() {
QueryWrapper q = new QueryWrapper<>();
q.eq("type" , 0);
return HttpResult.ok(sysMenuService.list(q)); //返回查询到的所有数据
}
//根据id查询
@GetMapping("/{id}")
public SysMenu findOne(@PathVariable Integer id) {
return sysMenuService.getById(id); //返回查询到指定id的数据
}
//分页查询
@GetMapping("/page")
public IPage findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize) {
//此处没有写查询条件逻辑,因为太活了,所有不在模板中写了
IPage page = new Page<>(pageNum, pageSize); //新建一个page
QueryWrapper queryWrapper = new QueryWrapper<>(); //新建一个queryWrapper
queryWrapper.orderByDesc("id"); //通过id倒序显示
return sysMenuService.page(page, queryWrapper); //返回分页
}
//导出接口
@GetMapping("/export")
public void export(HttpServletResponse response) throws Exception {
//从数据库查出所有的数据
List list = sysMenuService.list();
//通过工具类创建writer 写出到磁盘路径
//内存操作,写出到浏览器
ExcelWriter writer = ExcelUtil.getWriter(true);
// //自定义标题别名 。导出的时候,不起别名,就可以获取到一个英文的模板
// writer.addHeaderAlias("spliderimgurl","照片url");
// writer.addHeaderAlias("imgtitle","照片标题");
// writer.addHeaderAlias("imgpeople","照片人名");
//一次性写出list内的对象到excel,使用默认样式,强制输出标题
writer.write(list, true); //把list对象写入到writer中
//设置浏览器响应的格式,基本上都是固定的,且必须要设置
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
String fileName = URLEncoder.encode("sysMenu" , "UTF-8"); //直接用sysMenu作为导出文件的名字,可以修改为自己需要的中文,如:用户信息
response.setHeader("Content-Disposition" , "attachment;filename=" + fileName + ".xls");
ServletOutputStream out = response.getOutputStream(); //获取数据流
writer.flush(out, true); //把writer中的内容刷新到数据流中
out.close();
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
//导入接口
@PostMapping("/import")
public Boolean imp(MultipartFile file) throws Exception { //返回一个布尔值
InputStream inputStream = file.getInputStream(); //获取流文件内容
ExcelReader reader = ExcelUtil.getReader(inputStream);
//第一种方式,通过javabean的方式读取Excel内的对象,要求导入的表头要是英文,和导出的英文字段要一致
// 比较推荐这种方法
List list = reader.readAll(SysMenu.class); //定义一个SpiderdataSpiderxrmmw 用于接收读取到的内容
System.out.println(list);
//保持数据到数据库
//sysMenuService.save(one); //save方法,插入单个
sysMenuService.saveBatch(list); //saveBatch方法批量插入
return true; //返回一个true,表示插入成功
}
}