Bläddra i källkod

breakdown 衍生处理

TonyKang 3 år sedan
förälder
incheckning
17b6d1a4ed

+ 45 - 28
app/controller/report_controller.js

@@ -626,37 +626,46 @@ module.exports = app => {
                     );
                 });
             }
-            const pageRst = JSON.parse(fs.readFileSync('D:/GitHome/temp/计量excel原始数据_A3BZ6_5384_112表(清单).js', 'utf-8'));
-            const runnableRst = [];
-
-            const pageBrkSize = 6291456; // 6M, 1024*1024*6
-            // const pageBrkSize = 1048576; // 1M, 1024*1024*1
-            const picSize = await _chkRawPicSize(pageRst, baseDir);
-            if (picSize > pageBrkSize) {
-                let pageBrkAmt = Math.floor(pageRst.items.length / Math.ceil(picSize / pageBrkSize));
-                console.log('pageBrkAmt:' + pageBrkAmt);
-                if (pageBrkAmt < 10) {
-                    // 不用管
-                } else if (pageBrkAmt < 100) {
-                    pageBrkAmt = Math.floor(pageBrkAmt / 10) * 10;
-                } else if (pageBrkAmt < 1000) {
-                    pageBrkAmt = Math.floor(pageBrkAmt / 100) * 100;
+            try {
+                console.log('start:');
+                const pageRst = JSON.parse(fs.readFileSync('D:/GitHome/temp/计量excel原始数据_A3BZ6_5384_112表(清单).js', 'utf-8'));
+                console.log('read it');
+                const runnableRst = [];
+
+                const pageBrkSize = 6291456; // 6M, 1024*1024*6
+                // const pageBrkSize = 1048576; // 1M, 1024*1024*1
+                console.log('pageBrkSize:' + pageBrkSize);
+                const picSize = await _chkRawPicSize(pageRst, baseDir);
+                console.log('picSize:' + picSize);
+                if (picSize > pageBrkSize) {
+                    let pageBrkAmt = Math.floor(pageRst.items.length / Math.ceil(picSize / pageBrkSize));
+                    console.log('pageBrkAmt:' + pageBrkAmt);
+                    if (pageBrkAmt < 10) {
+                        // 不用管
+                    } else if (pageBrkAmt < 100) {
+                        pageBrkAmt = Math.floor(pageBrkAmt / 10) * 10;
+                    } else if (pageBrkAmt < 1000) {
+                        pageBrkAmt = Math.floor(pageBrkAmt / 100) * 100;
+                    } else {
+                        // 暂时不管
+                    }
+                    const newRptNames = []; // 这个为导出控制分页用
+                    const newPageDataRst = _resetPageDataByBreaks([pageRst], pageBrkAmt, ['工程计量表(计量单元-清单)'], newRptNames);
+                    for (let dtlIdx = 0; dtlIdx < newPageDataRst.length; dtlIdx++) {
+                        runnableRst.push(getExcelByPageData(newPageDataRst[dtlIdx], newRptNames[dtlIdx], null));
+                    }
                 } else {
-                    // 暂时不管
+                    runnableRst.push(getExcelByPageData(pageRst, '工程计量表(计量单元-清单)', null));
                 }
-                const newRptNames = []; // 这个为导出控制分页用
-                const newPageDataRst = _resetPageDataByBreaks([pageRst], pageBrkAmt, ['工程计量表(计量单元-清单)'], newRptNames);
-                for (let dtlIdx = 0; dtlIdx < newPageDataRst.length; dtlIdx++) {
-                    runnableRst.push(getExcelByPageData(newPageDataRst[dtlIdx], newRptNames[dtlIdx], null));
-                }
-            } else {
-                runnableRst.push(getExcelByPageData(pageRst, '工程计量表(计量单元-清单)', null));
-            }
 
 
-            const uuidRst = await Promise.all(runnableRst);
-            ctx.body = { data: uuidRst, waterMarkStr: null };
-            ctx.status = 201;
+                const uuidRst = await Promise.all(runnableRst);
+                ctx.body = { data: uuidRst, waterMarkStr: null };
+                ctx.status = 201;
+            } catch (ex) {
+                console.log(ex.toString());
+                ctx.status = 500;
+            }
         }
 
         async createExcelFilesInOneBookEx(ctx) {
@@ -1482,9 +1491,17 @@ async function _chkRawPicSize(pageData, baseDir) {
             // signature_cells PROP_SIGNATURE_CELLS
         }
     }
+    // console.log(picKeys);
     for (const pKey of picKeys) {
         const filePath = `${baseDir}/app${pKey}`;
-        const isExist = await isFileExisted(filePath);
+        console.log('filePath: ' + filePath);
+        let isExist = false;
+        try {
+            isExist = await isFileExisted(filePath);
+        } catch (ex) {
+            isExist = false;
+        }
+        console.log('isExist: ' + isExist);
         if (isExist) {
             const obj = fs.statSync(filePath);
             if (obj) {

+ 14 - 1
app/public/report/js/jpc_output.js

@@ -16,6 +16,11 @@ let JpcCanvasOutput = {
         let me = this;
         let ctx = canvas.getContext("2d");
         let floatReg = /^(-?\d+)(\.\d+)?$/;
+        let strReplaceReg1 = new RegExp('\n\r', 'gm'),
+            strReplaceReg2 = new RegExp('\r\n', 'gm'),
+            strReplaceReg3 = new RegExp('\n', 'gm'),
+            strReplaceReg4 = new RegExp('\r', 'gm')
+        ;
 
         function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
             let lType = type;
@@ -249,6 +254,13 @@ let JpcCanvasOutput = {
             }
             ctx.restore();
         }
+        function _preHandleSpliter(orgVal) {
+            let rst = orgVal;
+            if (rst !== null && rst !== '') {
+                rst = rst.replace(strReplaceReg1, '|').replace(strReplaceReg2, '|').replace(strReplaceReg3, '|').replace(strReplaceReg4, '|');
+            }
+            return rst;
+        }
         function _splitValues(cell, control, orgValues, ctx2D) {
             //根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
             if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
@@ -271,7 +283,8 @@ let JpcCanvasOutput = {
         }
         function private_drawCellText(cell, fonts, controls) {
             if (cell[JV.PROP_VALUE] !== null && cell[JV.PROP_VALUE] !== undefined) {
-                let values = ("" + cell[JV.PROP_VALUE]).split('|');
+                // let values = ("" + cell[JV.PROP_VALUE]).split('|');
+                let values = _preHandleSpliter("" + cell[JV.PROP_VALUE]).split('|');
                 let font = null;
                 if (typeof cell[JV.PROP_FONT] === "string") {
                     font = fonts[cell[JV.PROP_FONT]];

+ 25 - 2
app/public/report/js/rpt_jspdf.js

@@ -38,6 +38,11 @@ let JpcJsPDFHelper = {
         let me = this;
         let offsetX = 0;
         let offsetY = 0;
+        let strReplaceReg1 = new RegExp('\n\r', 'gm'),
+            strReplaceReg2 = new RegExp('\r\n', 'gm'),
+            strReplaceReg3 = new RegExp('\n', 'gm'),
+            strReplaceReg4 = new RegExp('\r', 'gm')
+        ;
         // let newName = pdfName;
         let pageObj = pageData;
         let paperSizeIdx = JV.PAGES_SIZE_STR.indexOf(paperSize);
@@ -266,6 +271,14 @@ let JpcJsPDFHelper = {
             }
         }
 
+        function _preHandleSpliter(orgVal) {
+            let rst = orgVal;
+            if (rst !== null && rst !== '') {
+                rst = rst.replace(strReplaceReg1, '|').replace(strReplaceReg2, '|').replace(strReplaceReg3, '|').replace(strReplaceReg4, '|');
+            }
+            return rst;
+        }
+
         function _splitValues(cell, control, orgValues, doc) {
             //根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
             if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
@@ -289,7 +302,8 @@ let JpcJsPDFHelper = {
 
         function private_drawCellText(doc, ctx, cell, fonts, controls) {
             if (cell[JV.PROP_VALUE] !== undefined && cell[JV.PROP_VALUE] !== null) {
-                let values = ("" + cell[JV.PROP_VALUE]).split('|');
+                // let values = ("" + cell[JV.PROP_VALUE]).split('|');
+                let values = _preHandleSpliter("" + cell[JV.PROP_VALUE]).split('|');
                 // let font = fonts[cell[JV.PROP_FONT]];
                 let font = null;
                 if (typeof cell[JV.PROP_FONT] === "string") {
@@ -361,6 +375,14 @@ let JpcJsPDFHelper = {
             }
         }
 
+        function _chkIfShinkFirst(control, actLines) {
+            let rst = false;
+            if (control.ShrinkFirst === 'T' && control.Wrap !== 'T' && actLines > 1) {
+                rst = true;
+            }
+            return rst;
+        }
+
         function private_drawText(doc, ctx, val, area, font, control) {
             let dftFontHeight = 12;
             let output = [];
@@ -450,7 +472,8 @@ let JpcJsPDFHelper = {
                     let lines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4));
                     lines = (lines === 0 || (control.Shrink === 'T' && control.ShrinkFirst === 'T'))?1:lines;
                     let actLines = private_splitString(val, validAreaTxtWidth, doc);
-                    if (actLines.length > lines && dftFontHeight >= 6) {
+                    // if (actLines.length > lines && dftFontHeight >= 6) {
+                    if ((actLines.length > lines || _chkIfShinkFirst(control, actLines.length)) && dftFontHeight >= 6) {
                         dftFontHeight--;
                         doc.setFontSize(dftFontHeight);
                         options.width = validAreaTxtWidth * PDF_SCALE;

+ 16 - 1
app/public/report/js/rpt_print.js

@@ -403,6 +403,20 @@ function _splitValues(cell, control, orgValues, ctx2D) {
     }
 }
 
+const strReplaceReg1 = new RegExp('\n\r', 'gm'),
+    strReplaceReg2 = new RegExp('\r\n', 'gm'),
+    strReplaceReg3 = new RegExp('\n', 'gm'),
+    strReplaceReg4 = new RegExp('\r', 'gm')
+;
+
+function _preHandleSpliter(orgVal) {
+    let rst = orgVal;
+    if (rst !== null && rst !== '') {
+        rst = rst.replace(strReplaceReg1, '|').replace(strReplaceReg2, '|').replace(strReplaceReg3, '|').replace(strReplaceReg4, '|');
+    }
+    return rst;
+}
+
 function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV, HtoVStr) {
     let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
     let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal";
@@ -424,7 +438,8 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canv
     }
     let values = null;
     if (typeof value === "string") {
-        values = value.split("|");
+        // values = value.split("|");
+        values = _preHandleSpliter(value).split('|');
     } else {
         values = [value];
     }