| | |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | //import com.kmood.datahandle.DocumentProducer; |
| | |
| | | import com.panzhihua.common.listen.ComMngPopulationServeExcelListen; |
| | | import com.panzhihua.common.listen.ComSwRotaExcelListen; |
| | | import com.panzhihua.common.model.dtos.community.*; |
| | | import com.panzhihua.common.model.vos.LiveVO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.WeatherVO; |
| | | import com.panzhihua.common.model.vos.community.*; |
| | | import com.panzhihua.common.model.vos.partybuilding.PartyBuildingComPbDynVO; |
| | | import com.panzhihua.common.model.vos.shop.ComShopSysConfVO; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import com.panzhihua.common.service.partybuilding.PartyBuildingService; |
| | | import com.panzhihua.common.utlis.HttpUtils; |
| | | import com.panzhihua.common.utlis.SFTPUtil; |
| | | import com.panzhihua.community_backstage.excel.CustomSheetWriteHandler; |
| | | //import freemarker.template.Configuration; |
| | | //import freemarker.template.Template; |
| | | //import freemarker.template.Version; |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import freemarker.template.Version; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import sun.applet.Main; |
| | | import sun.misc.BASE64Encoder; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.*; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.io.File; |
| | |
| | | } |
| | | } |
| | | |
| | | // @ApiOperation(value = "导出图片测试") |
| | | // @GetMapping("/export/picture") |
| | | // public static void testPictureOutModel () { |
| | | // try { |
| | | // Class<? extends Class> aClass = Main.class.getClass(); |
| | | // ClassLoader classLoader = aClass.getClassLoader(); |
| | | // if (classLoader == null){ |
| | | // classLoader = ClassLoader.getSystemClassLoader(); |
| | | // } |
| | | // String ActualModelPath = classLoader.getResource("model/").toURI().getPath(); |
| | | // String xmlPath = classLoader.getResource("model").toURI().getPath(); |
| | | // String ExportFilePath = classLoader.getResource(".").toURI().getPath() + "/picture.doc"; |
| | | // |
| | | // HashMap<String, Object> map = new HashMap<>(); |
| | | // //读取输出图片 |
| | | // URL introUrl = classLoader.getResource("./picture/微信图片_20210805165019.jpg"); |
| | | //// URL codeUrl = classLoader.getResource("./picture/exportTestPicture-code.png"); |
| | | //// URL titleUrl = classLoader.getResource("./picture/exportTestPicture-title.png"); |
| | | // |
| | | // String intro = Base64.getEncoder().encodeToString(FileUtils.readToBytesByFilepath(introUrl.toURI().getPath())); |
| | | // map.put("intro", intro); |
| | | //// String code = Base64.getEncoder().encodeToString(FileUtils.readToBytesByFilepath(codeUrl.toURI().getPath())); |
| | | //// map.put("code", code); |
| | | //// map.put("title", Base64.getEncoder().encodeToString(FileUtils.readToBytesByFilepath(titleUrl.toURI().getPath()))); |
| | | // //编译输出 |
| | | // DocumentProducer dp = new DocumentProducer(ActualModelPath); |
| | | //// String complie = dp.Complie(xmlPath, "picture.xml", true); |
| | | // dp.produce(map, ExportFilePath); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // |
| | | // @ApiOperation(value = "导出图片测试") |
| | | // @PostMapping("/export/picture") |
| | | // public void test(@RequestParam(value = "id") Long id){ |
| | | // Long communityId = this.getLoginUserInfo().getCommunityId(); |
| | | // Map<String,Object> dataMap = new HashMap<String, Object>(); |
| | | // try { |
| | | // ComSwSafetyWorkRecordVO comSwSafetyWorkRecordVO = JSONObject.parseObject(JSONObject.toJSONString(communityService.detailSafetyWorkRecord(id, communityId).getData()),ComSwSafetyWorkRecordVO.class); |
| | | // //日期 |
| | | // dataMap.put("date", new SimpleDateFormat("yyyy-MM-dd").format(comSwSafetyWorkRecordVO.getPatrolTime())); |
| | | // Configuration configuration = new Configuration(new Version("2.3.0")); |
| | | // configuration.setDefaultEncoding("utf-8"); |
| | | // |
| | | // /** |
| | | // * 以下是两种指定ftl文件所在目录路径的方式,注意这两种方式都是 |
| | | // * 指定ftl文件所在目录的路径,而不是ftl文件的路径 |
| | | // */ |
| | | // //指定路径的第一种方式(根据某个类的相对路径指定) |
| | | //// configuration.setClassForTemplateLoading(this.getClass(), ""); |
| | | // |
| | | // //指定路径的第二种方式,我的路径是C:/a.ftl |
| | | // configuration.setDirectoryForTemplateLoading(new File("c:/")); |
| | | // |
| | | // //输出文档路径及名称 |
| | | // File outFile = new File("D:/报销信息导出.doc"); |
| | | // |
| | | // //以utf-8的编码读取ftl文件 |
| | | // Template template = configuration.getTemplate("报告.ftl", "utf-8"); |
| | | // Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240); |
| | | // template.process(dataMap, out); |
| | | // out.close(); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | @ApiOperation(value = "下载安全工作记录报告") |
| | | @PostMapping("/export/safetyWorkRecord") |
| | | public R exportSafetyWorkRecord(@RequestParam(value = "id") Long id){ |
| | | Long communityId = this.getLoginUserInfo().getCommunityId(); |
| | | Map<String,Object> dataMap = new HashMap<String, Object>(); |
| | | ComSwSafetyWorkRecordVO comSwSafetyWorkRecordVO = JSONObject.parseObject(JSONObject.toJSONString(communityService.detailSafetyWorkRecord(id, communityId).getData()),ComSwSafetyWorkRecordVO.class); |
| | | //生成动态模板excel通过ftp工具上传到主节点,然后返回模板下载地址 |
| | | String name = "安全工作记录_" + comSwSafetyWorkRecordVO.getId() + ".doc"; |
| | | try { |
| | | //日期 |
| | | dataMap.put("date", new SimpleDateFormat("yyyy-MM-dd").format(comSwSafetyWorkRecordVO.getPatrolTime())); |
| | | //巡查类型 |
| | | dataMap.put("patrolType", comSwSafetyWorkRecordVO.getPatrolType()); |
| | | //社区名称 |
| | | dataMap.put("communityName", comSwSafetyWorkRecordVO.getCommunityName()); |
| | | //地址 |
| | | dataMap.put("address", comSwSafetyWorkRecordVO.getAddress()); |
| | | //记录内容 |
| | | dataMap.put("recordContent", comSwSafetyWorkRecordVO.getRecordContent()); |
| | | //发现记录 |
| | | dataMap.put("findRecord", comSwSafetyWorkRecordVO.getFindRecord()); |
| | | //记录照片 |
| | | String[] photo = comSwSafetyWorkRecordVO.getRecordPhoto().split(","); |
| | | for (int i = 0; i < photo.length; i++){ |
| | | downloadPicture(photo[i], comSwSafetyWorkRecordVO.getId() + "_" + i); |
| | | } |
| | | if (photo.length == 0 || null == photo){ |
| | | dataMap.put("imgStr1", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr2", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr3", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr4", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr5", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 1){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr3", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr4", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr5", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 2){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr4", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr5", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 3){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr5", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 4){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 5){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", photo[4]); |
| | | dataMap.put("imgStr6", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 6){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", photo[4]); |
| | | dataMap.put("imgStr6", photo[5]); |
| | | dataMap.put("imgStr7", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 7){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", photo[4]); |
| | | dataMap.put("imgStr6", photo[5]); |
| | | dataMap.put("imgStr7", photo[6]); |
| | | dataMap.put("imgStr8", getImageStr("/mnt/data/web/blank.jpg")); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 8){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", photo[4]); |
| | | dataMap.put("imgStr6", photo[5]); |
| | | dataMap.put("imgStr7", photo[6]); |
| | | dataMap.put("imgStr8", photo[7]); |
| | | dataMap.put("imgStr9", getImageStr("/mnt/data/web/blank.jpg")); |
| | | } |
| | | if (photo.length == 9){ |
| | | dataMap.put("imgStr1", photo[0]); |
| | | dataMap.put("imgStr2", photo[1]); |
| | | dataMap.put("imgStr3", photo[2]); |
| | | dataMap.put("imgStr4", photo[3]); |
| | | dataMap.put("imgStr5", photo[4]); |
| | | dataMap.put("imgStr6", photo[5]); |
| | | dataMap.put("imgStr7", photo[6]); |
| | | dataMap.put("imgStr8", photo[7]); |
| | | dataMap.put("imgStr9", photo[8]); |
| | | } |
| | | //备注 |
| | | dataMap.put("remark", comSwSafetyWorkRecordVO.getRemark()); |
| | | //巡查时间 |
| | | dataMap.put("patrolTime", new SimpleDateFormat("yyyy-MM-dd").format(comSwSafetyWorkRecordVO.getPatrolTime())); |
| | | //工作人员 |
| | | dataMap.put("personName", comSwSafetyWorkRecordVO.getPersonName()); |
| | | //填报人员 |
| | | dataMap.put("createName", comSwSafetyWorkRecordVO.getCreateName()); |
| | | //填报时间 |
| | | dataMap.put("createAt", new SimpleDateFormat("yyyy-MM-dd").format(comSwSafetyWorkRecordVO.getCreateAt())); |
| | | //获取请求url |
| | | String url = Constants.G_D_WEATHER_URL; |
| | | //获取请求参数 |
| | | String param = "key=" + Constants.G_D_WEATHER_KEY + "&city=510400"; |
| | | String result = HttpUtils.sendGet(url,param); |
| | | R r = R.ok(JSON.parseObject(result)); |
| | | WeatherVO weatherVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), WeatherVO.class);if (null != weatherVO) { |
| | | LiveVO liveVO = weatherVO.getLives().get(0); |
| | | //城市 |
| | | dataMap.put("city", liveVO.getCity()); |
| | | //天气 |
| | | dataMap.put("weather", liveVO.getWeather()); |
| | | //温度 |
| | | dataMap.put("temperature", liveVO.getTemperature()); |
| | | //风向 |
| | | dataMap.put("winddirection", liveVO.getWinddirection()); |
| | | //风力 |
| | | dataMap.put("windpower", liveVO.getWindpower()); |
| | | } |
| | | Configuration configuration = new Configuration(new Version("2.3.0")); |
| | | |
| | | configuration.setDefaultEncoding("utf-8"); |
| | | /** |
| | | * 以下是两种指定ftl文件所在目录路径的方式,注意这两种方式都是 |
| | | * 指定ftl文件所在目录的路径,而不是ftl文件的路径 |
| | | */ |
| | | //指定路径的第一种方式(根据某个类的相对路径指定) |
| | | // configuration.setClassForTemplateLoading(this.getClass(), ""); |
| | | |
| | | //指定路径的第二种方式,我的路径是C:/a.ftl |
| | | configuration.setDirectoryForTemplateLoading(new File("mnt/data/web/")); |
| | | |
| | | //输出文档路径及名称 |
| | | File outFile = new File("mnt/data/web/excel/安全工作记录_" + comSwSafetyWorkRecordVO.getId() + ".doc"); |
| | | |
| | | //以utf-8的编码读取ftl文件 |
| | | Template template = configuration.getTemplate("安全工作记录.ftl", "utf-8"); |
| | | Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240); |
| | | template.process(dataMap, out); |
| | | out.close(); |
| | | return R.ok(excelUrl + name); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("文件传输失败【{}】", e.getMessage()); |
| | | return R.fail(); |
| | | } |
| | | } |
| | | |
| | | private List<List<String>> headDataFilling(){ |
| | | List<List<String>> list = new ArrayList<List<String>>(); |
| | |
| | | data.add("2021-01-01"); |
| | | data.add("张三、李四、王二"); |
| | | data.add("138000000、138000000、138000000"); |
| | | data.add("王五、王六"); |
| | | data.add("138000000、138000000"); |
| | | data.add("王五"); |
| | | data.add("138000000"); |
| | | data.add("示例"); |
| | | return data; |
| | | } |
| | | |
| | | public String getImageStr(String fileName) { |
| | | String imgFile = fileName; |
| | | InputStream in = null; |
| | | byte[] data = null; |
| | | try { |
| | | in = new FileInputStream(imgFile); |
| | | data = new byte[in.available()]; |
| | | in.read(data); |
| | | in.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | BASE64Encoder encoder = new BASE64Encoder(); |
| | | return encoder.encode(data); |
| | | } |
| | | |
| | | public String downloadPicture(String urlString, String fileName) throws Exception { |
| | | // 构造URL |
| | | URL url = new URL(urlString); |
| | | // 打开连接 |
| | | URLConnection con = url.openConnection(); |
| | | // 输入流 |
| | | InputStream is = con.getInputStream(); |
| | | // 1K的数据缓冲 |
| | | byte[] bs = new byte[1024]; |
| | | // 读取到的数据长度 |
| | | int len; |
| | | // 输出的文件流 |
| | | String filename = "d:/" + fileName + ".jpg"; //下载路径及下载图片名称 |
| | | File file = new File(filename); |
| | | FileOutputStream os = new FileOutputStream(file, true); |
| | | // 开始读取 |
| | | while ((len = is.read(bs)) != -1) { |
| | | os.write(bs, 0, len); |
| | | } |
| | | // 完毕,关闭所有链接 |
| | | os.close(); |
| | | is.close(); |
| | | return filename; |
| | | } |
| | | } |
| | | |