ExcelController.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.imed.costaccount.web;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.io.IoUtil;
  4. import cn.hutool.poi.excel.ExcelReader;
  5. import cn.hutool.poi.excel.ExcelUtil;
  6. import cn.hutool.poi.excel.ExcelWriter;
  7. import com.imed.costaccount.common.exception.CostException;
  8. import com.imed.costaccount.common.util.Result;
  9. import com.imed.costaccount.model.User;
  10. import com.imed.costaccount.service.UserService;
  11. import com.imed.costaccount.service.impl.DepartmentServiceImpl;
  12. import com.imed.costaccount.service.impl.ProductServiceImpl;
  13. import io.swagger.annotations.Api;
  14. import io.swagger.annotations.ApiOperation;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.apache.poi.ss.usermodel.Sheet;
  17. import org.apache.shiro.SecurityUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.*;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import javax.servlet.ServletOutputStream;
  22. import javax.servlet.http.HttpServletResponse;
  23. import java.io.File;
  24. import java.io.IOException;
  25. import java.io.InputStream;
  26. import java.util.Arrays;
  27. import java.util.List;
  28. import java.util.UUID;
  29. /**
  30. * 相关导入导出操作
  31. */
  32. @Slf4j
  33. @Api(tags = "excel导入导出")
  34. @RestController
  35. @RequestMapping("/costAccount/excel")
  36. public class ExcelController {
  37. private UserService userService;
  38. @Autowired
  39. private DepartmentServiceImpl departmentService;
  40. @Autowired
  41. private ProductServiceImpl productService;
  42. public ExcelController(UserService userService) {
  43. this.userService = userService;
  44. }
  45. @ApiOperation("用户导出模板设置")
  46. @GetMapping("/getcurrentTemplate")
  47. public void getImportUserTemplate(HttpServletResponse response) throws IOException {
  48. User user = (User) SecurityUtils.getSubject().getPrincipal();
  49. // TODO: 2021/7/26 暂时没有登录
  50. String uuid = UUID.randomUUID().toString();
  51. String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
  52. FileUtil.del(FileUtil.file(url));
  53. ExcelWriter writer = new ExcelWriter(url);
  54. // 样式
  55. Sheet sheet = writer.getSheet();
  56. // 内容
  57. writer.merge(0, 1, 0, 4, "为了保证成功导入,请勿修改模板格式", false);
  58. writer.passCurrentRow();
  59. writer.passCurrentRow();
  60. writer.merge(2, 2, 0, 4, "测试医院用户导入", false);
  61. writer.passCurrentRow();
  62. writer.writeRow(Arrays.asList("院区","姓名", "工号", "密码","手机号码"));
  63. // 写入响应
  64. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  65. response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
  66. ServletOutputStream out = null;
  67. out = response.getOutputStream();
  68. writer.flush(out, true);
  69. writer.close();
  70. IoUtil.close(out);
  71. }
  72. @PostMapping("/importUser")
  73. @ApiOperation("导入用户")
  74. public Result importUser(@RequestParam("file") MultipartFile file) {
  75. InputStream in;
  76. try {
  77. in = file.getInputStream();
  78. ExcelReader reader = ExcelUtil.getReader(in);
  79. List<List<Object>> read = reader.read();
  80. log.info("最开始:read={}",read);
  81. log.info("-------------------------------假装我是个分割线------------------------------------");
  82. User user = (User) SecurityUtils.getSubject().getPrincipal();
  83. return userService.importUser(read, user);
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. throw new CostException(500, "导入失败");
  87. }
  88. }
  89. /**
  90. * 科室模板导出功能设置
  91. */
  92. @ApiOperation("科室导出模板设置")
  93. @GetMapping("/getDepartmentTemplate")
  94. public void getImportDepartmentTemplate(HttpServletResponse response) throws IOException {
  95. User user = (User) SecurityUtils.getSubject().getPrincipal();
  96. String uuid = UUID.randomUUID().toString();
  97. String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
  98. FileUtil.del(FileUtil.file(url));
  99. ExcelWriter writer = new ExcelWriter(url);
  100. // 样式
  101. Sheet sheet = writer.getSheet();
  102. // 内容
  103. writer.merge(0, 1, 0, 2, "为了保证成功导入,请勿修改模板格式", false);
  104. writer.passCurrentRow();
  105. writer.passCurrentRow();
  106. writer.merge(2, 2, 0, 2, "医院科室批量导入", false);
  107. writer.passCurrentRow();
  108. writer.setColumnWidth(0,20);
  109. writer.setColumnWidth(1,15);
  110. writer.setColumnWidth(2,15);
  111. writer.writeRow(Arrays.asList("院区","科室名称", "科室代码"));
  112. // 写入响应
  113. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  114. response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
  115. ServletOutputStream out = null;
  116. out = response.getOutputStream();
  117. writer.flush(out, true);
  118. writer.close();
  119. IoUtil.close(out);
  120. }
  121. /**
  122. * 批量导入科室信息
  123. */
  124. @PostMapping("/importDepartment")
  125. @ApiOperation("导入科室信息")
  126. public Result importDepartment(@RequestParam("file") MultipartFile file){
  127. InputStream in;
  128. try {
  129. in = file.getInputStream();
  130. ExcelReader reader = ExcelUtil.getReader(in);
  131. List<List<Object>> read = reader.read();
  132. log.info("最开始:read={}",read);
  133. log.info("-------------------------------------------------------------------");
  134. User user = (User) SecurityUtils.getSubject().getPrincipal();
  135. Long hospId = user.getHospId();
  136. return departmentService.importDepartment(read, hospId);
  137. }catch (IOException e){
  138. e.printStackTrace();;
  139. throw new CostException(500, "导入失败");
  140. }
  141. }
  142. /**
  143. * 收入成本项目批量导入模板
  144. */
  145. @ApiOperation("收入成本导出模板设置")
  146. @GetMapping("/getImportProductTemplate")
  147. public void getImportProductTemplate(HttpServletResponse response) throws IOException {
  148. User user = (User) SecurityUtils.getSubject().getPrincipal();
  149. String uuid = UUID.randomUUID().toString();
  150. String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
  151. FileUtil.del(FileUtil.file(url));
  152. ExcelWriter writer = new ExcelWriter(url);
  153. // 样式
  154. Sheet sheet = writer.getSheet();
  155. // 内容
  156. writer.merge(0, 1, 0, 2, "为了保证成功导入,请勿修改模板格式", false);
  157. writer.passCurrentRow();
  158. writer.passCurrentRow();
  159. writer.merge(2, 2, 0, 2, "医院成本收入批量导入", false);
  160. writer.passCurrentRow();
  161. writer.setColumnWidth(0,20);
  162. writer.setColumnWidth(1,15);
  163. writer.setColumnWidth(2,15);
  164. writer.writeRow(Arrays.asList("院区","成本项目名", "成本项目编号"));
  165. // 写入响应
  166. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  167. response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
  168. ServletOutputStream out = null;
  169. out = response.getOutputStream();
  170. writer.flush(out, true);
  171. writer.close();
  172. IoUtil.close(out);
  173. }
  174. /**
  175. * 收入成本项目批量导入
  176. */
  177. @PostMapping("/importProduct")
  178. @ApiOperation("批量导入收入成本信息")
  179. public Result importProduct(@RequestParam("file") MultipartFile file){
  180. InputStream in;
  181. try {
  182. in = file.getInputStream();
  183. ExcelReader reader = ExcelUtil.getReader(in);
  184. List<List<Object>> read = reader.read();
  185. log.info("最开始:read={}",read);
  186. log.info("-------------------------------------------------------------------");
  187. User user = (User) SecurityUtils.getSubject().getPrincipal();
  188. Long hospId = user.getHospId();
  189. return productService.importProduct(read, hospId);
  190. }catch (IOException e){
  191. e.printStackTrace();;
  192. throw new CostException(500, "导入失败");
  193. }
  194. }
  195. }