package cn.com.goldenwater.dcproj.controller.general; import cn.com.goldenwater.core.web.BaseController; import cn.com.goldenwater.core.web.BaseResponse; import cn.com.goldenwater.dcproj.dao.BisInspRsvrRgstrDao; import cn.com.goldenwater.dcproj.dto.BisInspRsvrRgstrPcDto; import cn.com.goldenwater.dcproj.param.TypeExportParam; import cn.com.goldenwater.dcproj.utils.export.ExcelFieldUtil; import cn.com.goldenwater.dcproj.utils.export.FieldFormatSkExp; import cn.com.goldenwater.dcproj.utils.export.FieldFormatSkImp; import cn.com.goldenwater.dcproj.utils.export.template.CreateSkExcelTemplate; import cn.com.goldenwater.dcproj.utils.impexcel.ExpAndImpUtil; import cn.com.goldenwater.dcproj.utils.impexcel.ImpUtil; import cn.com.goldenwater.id.util.UuidUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.*; /** *

* 通用的导出导入Test Controller *

* * @author liyz * @date 2019/7/19 19:24 **/ @Api(value = "通用的导出导入Test", tags = "通用的导出导入Test") @RestController @RequestMapping("/dc/geai") public class GeneralExpAndImpTestController extends BaseController { @Value("${export.templatePath}") private String templatePath; @Value("${impExcel.basePath}") private String impFileCachePath; @Autowired private RedisTemplate redisTemplate; @Autowired private ExcelFieldUtil excelFieldUtil; @Autowired private CreateSkExcelTemplate createSkExcelTemplate; @Autowired private BisInspRsvrRgstrDao bisInspRsvrRgstrDao; @ApiOperation(value = "下载") @RequestMapping(value = "/download", method = {RequestMethod.GET}) public BaseResponse download(HttpServletResponse response) { try { // 参数1 HttpServletResponse // 参数2 数据集,从库里查出来的要导出的数据集,没有给空对象,不为null // 参数3 模板的路径 // 参数4 从模板的第几行开始写入数据 key行号 -1 // 参数5 sheet的名称,也是导出的模板的名称 // 获取数据集,具体业务根据情况来写,最终得到一个List TypeExportParam tep = new TypeExportParam(); tep.setType("rsvr"); tep.setPresId("8C50B3937D1546B0BD7CBEB28DE84CC4"); // 水库 tep.setpType("1"); tep.setTableIds("08"); // 0未督查 1督查中 2已督查 tep.setState("1,0"); tep.setId("001041005001"); List data = bisInspRsvrRgstrDao.findPcPage(tep); List> list = excelFieldUtil.getBisInspRsvrRgstrPcDtoTemplate(createSkExcelTemplate.getBisVo(data, tep)); String filePath = templatePath + "/" + File.separator + "sk-t8-q2.xls"; // key所在的 int startRow = 4; String sheetName = "水库模板"; // 使用通用的下载模板的方法 ExpAndImpUtil.download(response, list, filePath, startRow, sheetName); } catch (Exception e) { e.printStackTrace(); return buildSuccessResponse("下载失败!"); } return buildSuccessResponse("下载成功!"); } @ApiOperation(value = "上传") @RequestMapping(value = "/upload", method = {RequestMethod.GET, RequestMethod.POST}) public BaseResponse upload(@ApiParam("数据流") @RequestParam() MultipartFile file) { // 返回[存储路径] String filePath = ""; try { // 参数1 文件流 // 参数2 要写入的文件夹,注意,是文件夹 String folderPath = ImpUtil.getDateFormatPath(impFileCachePath); // 使用通用的上传方法 filePath = ExpAndImpUtil.upload(file, folderPath); } catch (IOException e) { return buildSuccessResponse("上传失败!"); } return buildSuccessResponse(filePath); } @ApiOperation(value = "解析") @RequestMapping(value = "/parse", method = {RequestMethod.GET}) public BaseResponse> parse(@ApiParam("存储路径") @RequestParam() String filePath) { // 返回 数据集 List> listParse = new ArrayList<>(); List> listShow = new ArrayList<>(); Map map = new HashMap<>(); try { // 参数1 文件路径 // 参数2 从第几行开始解析 key所在的行号 -1 // 参数3 格式化的类,这个类用于把字典项转换和判断有无错误 // 用通用方法解析得到解析后的数据,可入库的数据 listParse = ExpAndImpUtil.parseData(filePath, 4, FieldFormatSkImp.class); // 把数据存在redis里,前端点击插入的时候,直接根据cacheId取 String cacheId = UuidUtil.uuid(); redisTemplate.opsForList().rightPushAll(cacheId, listParse); // 用通用方法解析得到解析后的数据,展示给前台的数据 listShow = ExpAndImpUtil.showData(listParse, FieldFormatSkExp.class); // 返回给前台的数据 map.put("listParse", listShow); map.put("cacheId", cacheId); } catch (IOException e) { e.printStackTrace(); } return buildSuccessResponse(map); } }