hongchuangyanfa преди 3 години
родител
ревизия
e8db0b8fa8

+ 0 - 1
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/CommonFileClient.java

@@ -23,5 +23,4 @@ public interface CommonFileClient {
     @PostMapping(value = API_PREFIX + "/excelToPdf", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     NewBladeFile excelToPdf(MultipartFile file);
 
-
 }

+ 3 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/CommonFileClientImpl.java

@@ -11,6 +11,7 @@ import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.core.tool.utils.ResourceUtil;
 import org.springblade.resource.builder.oss.OssBuilder;
 import org.springblade.resource.vo.NewBladeFile;
 import org.springframework.web.bind.annotation.RestController;
@@ -204,4 +205,6 @@ public class CommonFileClientImpl implements CommonFileClient {
         newBladeFile.setPage(page);
         return  newBladeFile;
     }
+
+
 }

+ 25 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -44,6 +44,7 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.unit.FileUtils;
 import org.springblade.manager.unit.HtmlToPdf;
+import org.springblade.manager.unit.PdfConvertA4Utils;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.wrapper.ExcelTabWrapper;
 import org.springblade.resource.feign.CommonFileClient;
@@ -257,7 +258,7 @@ public class ExcelTabController extends BladeController {
     public R putFileAttach(@RequestParam("file") MultipartFile file, Long nodeId) {
 
         ExcelTab detail = excelTabService.getById(nodeId);
-        // 删除excel文件
+        // 上传excel文件
         R<BladeFile> bladeFile = iossClient.addFileInfo(file);
         BladeFile bladeFile1 = bladeFile.getData();
         String filecode = SnowFlakeUtil.getId()+"";
@@ -268,6 +269,8 @@ public class ExcelTabController extends BladeController {
         //获取工作表
         Worksheet sheet = wb.getWorksheets().get(0);
         sheet.saveToHtml(thmlUrl);
+
+
         detail.setExtension(bladeFile1.getOriginalName());
         detail.setFileUrl(bladeFile1.getLink());
         detail.setFileType(3); // 表示为清表信息  1 表示祖节点  2 表示为节点信息 3 表示清表
@@ -568,7 +571,7 @@ public class ExcelTabController extends BladeController {
     @PostMapping("/save_buss_data")
     @ApiOperationSupport(order = 13)
     @ApiOperation(value = "填报页面数据保存", notes = "填报页面数据保存")
-    public R<String> saveBussData(@Valid @RequestBody JSONObject dataInfo, BladeUser bladeUser) {
+    public R<String> saveBussData(@Valid @RequestBody JSONObject dataInfo, BladeUser bladeUser) throws IOException {
 
         JSONArray dataArray = new JSONArray();
         if(dataInfo.containsKey("dataInfo")){ // 节点保存
@@ -693,7 +696,7 @@ public class ExcelTabController extends BladeController {
         }
 
         jdbcTemplate.execute(sqlInfo);
-
+        this.getBussPdfInfo(Long.parseLong(pkeyId));
        }
         return  R.success("1");
     }
@@ -1184,17 +1187,24 @@ public class ExcelTabController extends BladeController {
             return R.fail("请关联清表!");
         }
 
+        String tabName = wbsTreeContract.getInitTableName();
+        String isExitSql = " select * from information_schema.TABLES where TABLE_NAME='"+tabName+"'";
+        List<Map<String, Object>> tablist = jdbcTemplate.queryForList(isExitSql);
+
+        Document doc = null;
+        //
+        if(tablist!=null && tablist.size()>=1){
+
         String querySql = "select * from "+wbsTreeContract.getInitTableName()+" where p_key_id="+pkeyId ;
         List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
         if(dataIn==null){
             return R.fail("请填写数据!");
         }
         Map<String, Object> mysqlData = dataIn.get(0);
-
         File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
         String htmlString =  IoUtil.readToString(new FileInputStream(file1));
         // 样式集合
-        Document doc = Jsoup.parse(htmlString);
+            doc = Jsoup.parse(htmlString);
         //解析
         Element table = doc.select("table").first();
         Elements trs = table.select("tr");
@@ -1224,7 +1234,14 @@ public class ExcelTabController extends BladeController {
             }
         }
 
+        }else{
+            File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
+            String htmlString =  IoUtil.readToString(new FileInputStream(file1));
+            // 样式集合
+            doc = Jsoup.parse(htmlString);
+        }
         String pdfPath="/Users/hongchuangyanfa/Desktop/pdf//"+pkeyId+".pdf";
+        String pdfPath_size="/Users/hongchuangyanfa/Desktop/pdf//"+pkeyId+"size.pdf";
         String pdfHtmlPath="/Users/hongchuangyanfa/Desktop/pdfHtml//"+pkeyId+".html";
 
         File writefile = new File(pdfHtmlPath);
@@ -1233,8 +1250,9 @@ public class ExcelTabController extends BladeController {
         HtmlToPdf html = new HtmlToPdf();
         html.tomPdf(pdfHtmlPath,pdfPath);
 
-        BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
+        PdfConvertA4Utils.convert(pdfPath,pdfPath_size);
 
+        BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath_size);
         //
         TableFile tableFile1 = tableFileService.getBaseMapper().selectOne(Wrappers.<TableFile>query().lambda()
                 .eq(TableFile::getTabId, pkeyId).eq(TableFile::getType,1));
@@ -1271,7 +1289,6 @@ public class ExcelTabController extends BladeController {
         updateWrapper.set("pdf_url",bladeFile2.getLink());
         wbsTreeContractService.update(updateWrapper);
 
-
         return R.data(bladeFile2.getLink());
     }
 
@@ -1393,7 +1410,7 @@ public class ExcelTabController extends BladeController {
 
         // 获取有权限的节点信息
         List<WbsTreeContract> wbsTreeContractList = wbsTreeContractService.searchNodeAllTable(nodeId, classify, contractId, projectId);
-        List<String> data = wbsTreeContractList.stream().filter(wbsTreeContract -> wbsTreeContract.getPdfUrl()!=null).map(WbsTreeContract::getPdfUrl).collect(Collectors.toList());
+        List<String> data = wbsTreeContractList.stream().filter(wbsTreeContract ->  wbsTreeContract.getPdfUrl()!=null && !wbsTreeContract.getIsBussShow().equals("2")).map(WbsTreeContract::getPdfUrl).collect(Collectors.toList());
 
         String listPdf = "/Users/hongchuangyanfa/Desktop/pdf/"+nodeId+".pdf";
 

+ 22 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableFileController.java

@@ -16,12 +16,17 @@
  */
 package org.springblade.manager.controller;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.entity.TableFile;
+import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.service.IWbsTreeContractService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.manager.vo.TableFileVO;
@@ -43,6 +48,8 @@ import java.util.List;
 public class TableFileController extends BladeController {
 
 	private final ITableFileService tableFileService;
+
+	private final IWbsTreeContractService wbsTreeContractService;
 /*
 	*//**
 	 * 详情
@@ -115,7 +122,21 @@ public class TableFileController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(tableFileService.removeByIds(Func.toLongList(ids)));
+		// 查出基本信息
+		TableFile tableFile = tableFileService.getById(ids);
+
+		// 删除数据
+		tableFileService.removeByIds(Func.toLongList(ids));
+
+		List<TableFileVO> fileVOList = tableFileService.selectTableFileList(Long.parseLong(tableFile.getTabId()));
+
+		if(fileVOList==null || fileVOList.size()<=0){
+			UpdateWrapper<WbsTreeContract> updateWrapper = new UpdateWrapper<>();
+			updateWrapper.in("p_key_id",tableFile.getTabId());
+			updateWrapper.set("tab_file_type",1);
+			wbsTreeContractService.update(updateWrapper);
+		}
+		return R.status(true);
 	}
 
 	/**

+ 4 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java

@@ -173,10 +173,12 @@ public class TextdictInfoController extends BladeController {
 		String weighing = element.children().get(0).attr("weighing");
 
 		String parm = trindex+","+tdindex+","+x1+","+x2+","+y1+","+y2+",$event";
-		String oncklickText =keyname+","+trindex+","+tdindex;
+		String oncklickText ="'"+ placeholder +"',"+trindex+","+tdindex;
+
 		String vmode = "formData."+keyname;
 		if(textdictInfo.getTextId().equals("input")){ // 单选框
-			element.empty().append("<el-input type='text' v-model="+vmode+" @focus='getInformation("+oncklickText+")' placeholder="+placeholder+" keyname="+keyname+" weighing="+weighing+"  @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+trindex+" tdIndex="+tdindex+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' > </el-input>");
+			element.empty().append("<el-input type='text' v-model="+vmode+" placeholder="+placeholder+" keyname="+keyname+" weighing="+weighing+"  @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+trindex+" tdIndex="+tdindex+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" style='width:100%;height:100%' > </el-input>");
+			element.children().get(0).attr("@focus","getInformation("+oncklickText+")");
 		}else if(textdictInfo.getTextId().equals("textarea")){ // 文本域
 			int rowspan = element.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(element.attr("ROWSPAN"));
 			//@focus='getInformation("+oncklickText+")'

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml

@@ -47,7 +47,9 @@
 
 
     <select id="selectExcelTabPage" resultMap="excelTabResultMap">
-        select * from m_excel_tab where is_deleted = 0
+        select x.id,x.create_time,x.name,
+               (SELECT count(1) from m_excel_tab a where  FIND_IN_SET(x.id,a.alias) and a.is_deleted = 0 and a.file_type=3) as tab_cout
+        from m_excel_tab x  where is_deleted = 0 and parent_id =#{param2.parentId}
     </select>
 
     <select id="tabLazyTree" resultMap="treeNodeResultMap" >

+ 17 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/unit/HtmlToPdf.java

@@ -4,7 +4,10 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import com.itextpdf.html2pdf.ConverterProperties;
 import com.itextpdf.html2pdf.HtmlConverter;
@@ -19,6 +22,7 @@ import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
 import com.itextpdf.kernel.pdf.canvas.draw.ILineDrawer;
 import com.itextpdf.layout.Document;
 import com.itextpdf.layout.element.LineSeparator;
+import com.itextpdf.text.RectangleReadOnly;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
@@ -42,22 +46,30 @@ public class HtmlToPdf {
 		org.jsoup.nodes.Document doc = Jsoup.parse(htmlString);
 		//解析
 		Element table = doc.select("table").first();
+
 		Elements col = doc.select("Col");
 		Elements trs = table.select("tr");
-		int html_max_width = 0;
-		int html_max_heght = trs.size() * 36;
+		float html_max_width = 0;
+		float html_max_heght = trs.size() * 36;
 		for(int i = 0 ; i <col.size();i++){
 			Element element = col.get(i);
 			html_max_width += Integer.parseInt(element.attr("width").replaceAll("px",""));
 		}
 
+
 		ConverterProperties props = new ConverterProperties();
 		DefaultFontProvider defaultFontProvider = new DefaultFontProvider(false, false, false);
 		defaultFontProvider.addFont(FONT);
 		props.setFontProvider(defaultFontProvider);
 		PdfWriter writer = new PdfWriter(DEST);
 		PdfDocument pdf = new PdfDocument(writer);
-
+		if(html_max_width>html_max_heght){
+			html_max_width = 1123;
+			html_max_heght = 794;
+		}else{
+			html_max_width = 794;
+			html_max_heght = 1123;
+		}
 		pdf.setDefaultPageSize(new PageSize(html_max_width-200, html_max_heght));
 		Document document = HtmlConverter.convertToDocument(new FileInputStream(html), pdf, props);
 		// 将所有内容在一个页面显示
@@ -67,19 +79,11 @@ public class HtmlToPdf {
 		document.getRenderer().close();
 		PdfPage page = pdf.getPage(1);
 		float y = endPosition.getY() - 36;
-		page.setMediaBox(new Rectangle(0, y, html_max_width-200, html_max_heght - y));
+		page.setMediaBox(new Rectangle(0, y, html_max_width-200, html_max_heght));
 		document.close();
 		pdf.close();
 	}
 
-/*	public static void main(String[] args) {
-		try {
-			HtmlToPdf html = new HtmlToPdf();
-			html.tomPdf(SRC, DEST);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}*/
 
 	class EndPosition implements ILineDrawer {
 
@@ -148,4 +152,5 @@ public class HtmlToPdf {
 		}
 
 	}
+
 }

+ 65 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/unit/PdfConvertA4Utils.java

@@ -0,0 +1,65 @@
+package org.springblade.manager.unit;
+
+import com.itextpdf.text.Document;
+import com.itextpdf.text.PageSize;
+import com.itextpdf.text.pdf.PdfContentByte;
+import com.itextpdf.text.pdf.PdfImportedPage;
+import com.itextpdf.text.pdf.PdfReader;
+import com.itextpdf.text.pdf.PdfWriter;
+
+import java.io.FileOutputStream;
+
+public class PdfConvertA4Utils {
+    /**
+     * @Param source 源文件
+     * @Param target 转换后文件
+     * @Description 将PDF转为A4格式
+     * @Date: 2021/4/25
+     **/
+    public static void convert(String source, String target) {
+        try {
+            PdfReader pdfReader = new PdfReader(source);
+            Document doc = new Document();
+            PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(target));
+            doc.open();
+            PdfContentByte cb = writer.getDirectContent();
+            for(int i = 1; i <= pdfReader.getNumberOfPages(); i++){
+                PdfImportedPage page = writer.getImportedPage(pdfReader, i);
+                float width = page.getWidth();
+                float height = page.getHeight();
+                if(height > width) {
+                    //横向
+                    doc.setPageSize(PageSize.A4);
+                    doc.newPage();
+                    //计算比例
+                    float widthScale = getWidthScale(width);
+                    float heightScale = getHeightScale(height);
+                    //addTemplate方法中有6个float类型的参数,是通过二维图像仿射变换得到的
+                    //cb.addTemplate(page, new AffineTransform(widthScale, 0, 0, heightScale,0,0));
+                    //二维图像仿射变换:https://www.cnblogs.com/v2m_/archive/2013/05/09/3070187.html
+                    cb.addTemplate(page, widthScale, 0, 0, heightScale,0,0);
+                } else {
+                    //纵向
+                    doc.setPageSize(new com.itextpdf.text.Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth()));
+                    doc.newPage();
+                    float widthScale = getWidthScale(height);
+                    float heightScale = getHeightScale(width);
+                    cb.addTemplate(page, widthScale, 0, 0, heightScale,0,0);
+                }
+            }
+            doc.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+    private static float getWidthScale(float width) {
+        float scale = PageSize.A4.getWidth() / width;
+        return scale;
+    }
+
+    private static float getHeightScale(float height) {
+        float scale = PageSize.A4.getHeight() / height;
+        return scale;
+    }
+
+}