f59fbdb79b8f204c16463e0b25ffcf67728d2747.svn-base 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package cn.com.goldenwater.dcproj.controller.general;
  2. import cn.com.goldenwater.core.web.BaseController;
  3. import cn.com.goldenwater.core.web.BaseResponse;
  4. import cn.com.goldenwater.dcproj.dao.BisInspRsvrRgstrDao;
  5. import cn.com.goldenwater.dcproj.dto.BisInspRsvrRgstrPcDto;
  6. import cn.com.goldenwater.dcproj.param.TypeExportParam;
  7. import cn.com.goldenwater.dcproj.utils.export.ExcelFieldUtil;
  8. import cn.com.goldenwater.dcproj.utils.export.FieldFormatSkExp;
  9. import cn.com.goldenwater.dcproj.utils.export.FieldFormatSkImp;
  10. import cn.com.goldenwater.dcproj.utils.export.template.CreateSkExcelTemplate;
  11. import cn.com.goldenwater.dcproj.utils.impexcel.ExpAndImpUtil;
  12. import cn.com.goldenwater.dcproj.utils.impexcel.ImpUtil;
  13. import cn.com.goldenwater.id.util.UuidUtil;
  14. import io.swagger.annotations.Api;
  15. import io.swagger.annotations.ApiOperation;
  16. import io.swagger.annotations.ApiParam;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.data.redis.core.RedisTemplate;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestMethod;
  22. import org.springframework.web.bind.annotation.RequestParam;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import org.springframework.web.multipart.MultipartFile;
  25. import javax.servlet.http.HttpServletResponse;
  26. import java.io.File;
  27. import java.io.IOException;
  28. import java.util.*;
  29. /**
  30. * <p>
  31. * 通用的导出导入Test Controller
  32. * </p>
  33. *
  34. * @author liyz
  35. * @date 2019/7/19 19:24
  36. **/
  37. @Api(value = "通用的导出导入Test", tags = "通用的导出导入Test")
  38. @RestController
  39. @RequestMapping("/dc/geai")
  40. public class GeneralExpAndImpTestController extends BaseController {
  41. @Value("${export.templatePath}")
  42. private String templatePath;
  43. @Value("${impExcel.basePath}")
  44. private String impFileCachePath;
  45. @Autowired
  46. private RedisTemplate redisTemplate;
  47. @Autowired
  48. private ExcelFieldUtil excelFieldUtil;
  49. @Autowired
  50. private CreateSkExcelTemplate createSkExcelTemplate;
  51. @Autowired
  52. private BisInspRsvrRgstrDao bisInspRsvrRgstrDao;
  53. @ApiOperation(value = "下载")
  54. @RequestMapping(value = "/download", method = {RequestMethod.GET})
  55. public BaseResponse<String> download(HttpServletResponse response) {
  56. try {
  57. // 参数1 HttpServletResponse
  58. // 参数2 数据集,从库里查出来的要导出的数据集,没有给空对象,不为null
  59. // 参数3 模板的路径
  60. // 参数4 从模板的第几行开始写入数据 key行号 -1
  61. // 参数5 sheet的名称,也是导出的模板的名称
  62. // 获取数据集,具体业务根据情况来写,最终得到一个List
  63. TypeExportParam tep = new TypeExportParam();
  64. tep.setType("rsvr");
  65. tep.setPresId("8C50B3937D1546B0BD7CBEB28DE84CC4");
  66. // 水库
  67. tep.setpType("1");
  68. tep.setTableIds("08");
  69. // 0未督查 1督查中 2已督查
  70. tep.setState("1,0");
  71. tep.setId("001041005001");
  72. List<BisInspRsvrRgstrPcDto> data = bisInspRsvrRgstrDao.findPcPage(tep);
  73. List<Map<String, Object>> list = excelFieldUtil.getBisInspRsvrRgstrPcDtoTemplate(createSkExcelTemplate.getBisVo(data, tep));
  74. String filePath = templatePath + "/" + File.separator + "sk-t8-q2.xls";
  75. // key所在的
  76. int startRow = 4;
  77. String sheetName = "水库模板";
  78. // 使用通用的下载模板的方法
  79. ExpAndImpUtil.download(response, list, filePath, startRow, sheetName);
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. return buildSuccessResponse("下载失败!");
  83. }
  84. return buildSuccessResponse("下载成功!");
  85. }
  86. @ApiOperation(value = "上传")
  87. @RequestMapping(value = "/upload", method = {RequestMethod.GET, RequestMethod.POST})
  88. public BaseResponse<String> upload(@ApiParam("数据流") @RequestParam() MultipartFile file) {
  89. // 返回[存储路径]
  90. String filePath = "";
  91. try {
  92. // 参数1 文件流
  93. // 参数2 要写入的文件夹,注意,是文件夹
  94. String folderPath = ImpUtil.getDateFormatPath(impFileCachePath);
  95. // 使用通用的上传方法
  96. filePath = ExpAndImpUtil.upload(file, folderPath);
  97. } catch (IOException e) {
  98. return buildSuccessResponse("上传失败!");
  99. }
  100. return buildSuccessResponse(filePath);
  101. }
  102. @ApiOperation(value = "解析")
  103. @RequestMapping(value = "/parse", method = {RequestMethod.GET})
  104. public BaseResponse<Map<String, Object>> parse(@ApiParam("存储路径") @RequestParam() String filePath) {
  105. // 返回 数据集
  106. List<LinkedHashMap<String, Object>> listParse = new ArrayList<>();
  107. List<LinkedHashMap<String, Object>> listShow = new ArrayList<>();
  108. Map<String, Object> map = new HashMap<>();
  109. try {
  110. // 参数1 文件路径
  111. // 参数2 从第几行开始解析 key所在的行号 -1
  112. // 参数3 格式化的类,这个类用于把字典项转换和判断有无错误
  113. // 用通用方法解析得到解析后的数据,可入库的数据
  114. listParse = ExpAndImpUtil.parseData(filePath, 4, FieldFormatSkImp.class);
  115. // 把数据存在redis里,前端点击插入的时候,直接根据cacheId取
  116. String cacheId = UuidUtil.uuid();
  117. redisTemplate.opsForList().rightPushAll(cacheId, listParse);
  118. // 用通用方法解析得到解析后的数据,展示给前台的数据
  119. listShow = ExpAndImpUtil.showData(listParse, FieldFormatSkExp.class);
  120. // 返回给前台的数据
  121. map.put("listParse", listShow);
  122. map.put("cacheId", cacheId);
  123. } catch (IOException e) {
  124. e.printStackTrace();
  125. }
  126. return buildSuccessResponse(map);
  127. }
  128. }