package com.imed.costaccount.web; import cn.hutool.core.io.FileUtil; 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.imed.costaccount.common.exception.CostException; import com.imed.costaccount.common.util.Result; import com.imed.costaccount.model.User; import com.imed.costaccount.service.UserService; import com.imed.costaccount.service.impl.DepartmentServiceImpl; import com.imed.costaccount.service.impl.ProductServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Sheet; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.UUID; /** * 相关导入导出操作 */ @Slf4j @Api(tags = "excel导入导出") @RestController @RequestMapping("/costAccount/excel") public class ExcelController { private UserService userService; @Autowired private DepartmentServiceImpl departmentService; @Autowired private ProductServiceImpl productService; public ExcelController(UserService userService) { this.userService = userService; } @ApiOperation("用户导出模板设置") @GetMapping("/getcurrentTemplate") public void getImportUserTemplate(HttpServletResponse response) throws IOException { User user = (User) SecurityUtils.getSubject().getPrincipal(); // TODO: 2021/7/26 暂时没有登录 String uuid = UUID.randomUUID().toString(); String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls"; FileUtil.del(FileUtil.file(url)); ExcelWriter writer = new ExcelWriter(url); // 样式 Sheet sheet = writer.getSheet(); // 内容 writer.merge(0, 1, 0, 4, "为了保证成功导入,请勿修改模板格式", false); writer.passCurrentRow(); writer.passCurrentRow(); writer.merge(2, 2, 0, 4, "测试医院用户导入", false); writer.passCurrentRow(); writer.writeRow(Arrays.asList("院区","姓名", "工号", "密码","手机号码")); // 写入响应 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls"); ServletOutputStream out = null; out = response.getOutputStream(); writer.flush(out, true); writer.close(); IoUtil.close(out); } @PostMapping("/importUser") @ApiOperation("导入用户") public Result importUser(@RequestParam("file") MultipartFile file) { InputStream in; try { in = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(in); List> read = reader.read(); log.info("最开始:read={}",read); log.info("-------------------------------假装我是个分割线------------------------------------"); User user = (User) SecurityUtils.getSubject().getPrincipal(); return userService.importUser(read, user); } catch (IOException e) { e.printStackTrace(); throw new CostException(500, "导入失败"); } } /** * 科室模板导出功能设置 */ @ApiOperation("科室导出模板设置") @GetMapping("/getDepartmentTemplate") public void getImportDepartmentTemplate(HttpServletResponse response) throws IOException { User user = (User) SecurityUtils.getSubject().getPrincipal(); String uuid = UUID.randomUUID().toString(); String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls"; FileUtil.del(FileUtil.file(url)); ExcelWriter writer = new ExcelWriter(url); // 样式 Sheet sheet = writer.getSheet(); // 内容 writer.merge(0, 1, 0, 2, "为了保证成功导入,请勿修改模板格式", false); writer.passCurrentRow(); writer.passCurrentRow(); writer.merge(2, 2, 0, 2, "医院科室批量导入", false); writer.passCurrentRow(); writer.setColumnWidth(0,20); writer.setColumnWidth(1,15); writer.setColumnWidth(2,15); writer.writeRow(Arrays.asList("院区","科室名称", "科室代码")); // 写入响应 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls"); ServletOutputStream out = null; out = response.getOutputStream(); writer.flush(out, true); writer.close(); IoUtil.close(out); } /** * 批量导入科室信息 */ @PostMapping("/importDepartment") @ApiOperation("导入科室信息") public Result importDepartment(@RequestParam("file") MultipartFile file){ InputStream in; try { in = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(in); List> read = reader.read(); log.info("最开始:read={}",read); log.info("-------------------------------------------------------------------"); User user = (User) SecurityUtils.getSubject().getPrincipal(); Long hospId = user.getHospId(); return departmentService.importDepartment(read, hospId); }catch (IOException e){ e.printStackTrace();; throw new CostException(500, "导入失败"); } } /** * 收入成本项目批量导入模板 */ @ApiOperation("收入成本导出模板设置") @GetMapping("/getImportProductTemplate") public void getImportProductTemplate(HttpServletResponse response) throws IOException { User user = (User) SecurityUtils.getSubject().getPrincipal(); String uuid = UUID.randomUUID().toString(); String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls"; FileUtil.del(FileUtil.file(url)); ExcelWriter writer = new ExcelWriter(url); // 样式 Sheet sheet = writer.getSheet(); // 内容 writer.merge(0, 1, 0, 2, "为了保证成功导入,请勿修改模板格式", false); writer.passCurrentRow(); writer.passCurrentRow(); writer.merge(2, 2, 0, 2, "医院成本收入批量导入", false); writer.passCurrentRow(); writer.setColumnWidth(0,20); writer.setColumnWidth(1,15); writer.setColumnWidth(2,15); writer.writeRow(Arrays.asList("院区","成本项目名", "成本项目编号")); // 写入响应 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls"); ServletOutputStream out = null; out = response.getOutputStream(); writer.flush(out, true); writer.close(); IoUtil.close(out); } /** * 收入成本项目批量导入 */ @PostMapping("/importProduct") @ApiOperation("批量导入收入成本信息") public Result importProduct(@RequestParam("file") MultipartFile file){ InputStream in; try { in = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(in); List> read = reader.read(); log.info("最开始:read={}",read); log.info("-------------------------------------------------------------------"); User user = (User) SecurityUtils.getSubject().getPrincipal(); Long hospId = user.getHospId(); return productService.importProduct(read, hospId); }catch (IOException e){ e.printStackTrace();; throw new CostException(500, "导入失败"); } } }