Преглед на файлове

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/ConstructionCost

Conflicts:
	modules/pm/facade/pm_facade.js
zhangweicheng преди 4 години
родител
ревизия
b7a90430de

+ 33 - 24
modules/pm/facade/pm_facade.js

@@ -2477,29 +2477,37 @@ async function downLoadProjectFile(info) {
     return result;
 }
 
-async function doDownLoadAndImport(privateDownloadUrl,info) {
-    let stream = fs.createWriteStream(path.join(__dirname, "../../../tmp/"+info.key));//
-    request(privateDownloadUrl).pipe(stream).on("close", async function (err) {
-        console.log("文件[" + info.key + "]下载完毕");
-        let doc = {status:"finish"};
-        try {
-            let data = fs.readFileSync(stream.path,'utf-8');
-            let result = await importProjects(data,{session:info.session},info.updateData);
-            if(result.error == 1){
-                doc.errorMsg = result.msg;
-                doc.status = "error";
-            } else {
-                doc.projectID = [result.constructionProjectID];
-            }
-        }catch (error){
-            console.log(error.message);
-            doc.errorMsg = "导入失败,请检查文件!";
-            doc.status = "error";
-        }finally {
-            await importLogsModel.update({key:info.key},doc);
-            fs.unlinkSync(stream.path);
-        }
-    });
+async function doDownLoadAndImport(privateDownloadUrl, info) {
+  let stream = fs.createWriteStream(path.join(__dirname, "../../../tmp/" + info.key));//
+  request(privateDownloadUrl)
+      .on('error', async function(err) {
+          await importLogsModel.update({ key: info.key }, { status: 'error', errorMsg: err.toString() });
+      })
+      .pipe(stream)
+      .on("close", async function () {
+          console.log("文件[" + info.key + "]下载完毕");
+          let doc = { status: "finish" };
+          try {
+              let data = fs.readFileSync(stream.path, 'utf-8');
+              let result = await importProjects(data, { session: info.session }, info.updateData);
+              if (result.error == 1) {
+                  doc.errorMsg = result.msg;
+                  doc.status = "error";
+              } else {
+                  doc.projectID = [result.constructionProjectID];
+              }
+          } catch (error) {
+              console.log(error.message);
+              doc.errorMsg = "导入失败,请检查文件!";
+              doc.status = "error";
+          } finally {
+              await importLogsModel.update({ key: info.key }, doc);
+              fs.unlinkSync(stream.path);
+          }
+      })
+      .on('error', async function () {
+          await importLogsModel.update({ key: info.key }, { status: 'error', errorMsg: `文件[${info.key}]下载失败,请稍后再试。` });
+      });
 }
 
 async function importProcessChecking(data){
@@ -2552,6 +2560,7 @@ async function downloadFileSync(key) {
     const stream = fs.createWriteStream(filePath);
     return new Promise((resolve, reject) => {
         request(privateDownloadUrl)
+            .on('error', reject)
             .pipe(stream)
             .on('close', () => {
                 // 读取文件返回字符串
@@ -2606,7 +2615,7 @@ async function handleImportInterface(key, session) {
         const projectID = await importProject(importData, userID, compilationID, overWriteUrl);
         doc.projectID = [projectID];
     } catch (err) {
-        doc.errorMsg = typeof err === 'string' ? err : '导入接口失败,请检查接口文件!';
+        doc.errorMsg = typeof err === 'string' ? err : err.toString();
         doc.status = 'error';
     } finally {
         await importLogsModel.update({ key }, doc);

+ 22 - 105
modules/reports/controllers/rpt_controller.js

@@ -2,6 +2,7 @@
  * Created by Tony on 2017/3/13.
  */
 
+import UserModel from "../../users/models/user_model";
 import mongoose from "mongoose";
 import async from "async";
 
@@ -37,7 +38,7 @@ let callback = function(req, res, err, data){
 const WATERMARK_FONT = {
     "Name": "宋体",
     "FontHeight": "32",
-    "FontColor": "CYAN",
+    "FontColor": "GOLD",
     "FontBold": "T",
     "FontItalic": "F",
     "FontUnderline": "F",
@@ -361,8 +362,8 @@ function getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, custo
 
 function fillWaterMark(pageRstArray) {
     for (const pageRst of pageRstArray) {
-        if (!pageRst[JV.NODE_FONT_COLLECTION].hasOwnProperty('WaterMark')) {
-            pageRst[JV.NODE_FONT_COLLECTION]['WaterMark'] = WATERMARK_FONT;
+        if (!pageRst[JV.NODE_FONT_COLLECTION].hasOwnProperty(JV.PROP_WATERMARK)) {
+            pageRst[JV.NODE_FONT_COLLECTION][JV.PROP_WATERMARK] = WATERMARK_FONT;
         }
         for (const page of pageRst.items) {
             const warterCell = {
@@ -377,12 +378,12 @@ function fillWaterMark(pageRstArray) {
                     "Bottom": 500
                 }
             };
-            page.cells.push(warterCell);
+            //page.cells.push(warterCell);
+            page.cells.unshift(warterCell);
         }
     }
 }
 
-
 module.exports = {
     getReportAllPages: function (req, res) {
         let params = JSON.parse(req.body.params),
@@ -395,7 +396,22 @@ module.exports = {
         // req.session.sessionUser.ssoId
         let user_id = req.session.sessionUser.id;
         getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, null, JV.OUTPUT_TYPE_NORMAL, function (err, pageRst) {
-            callback(req, res, err, pageRst);
+            try {
+                let userModel = new UserModel();
+                // console.log('req.session.sessionUser.ssoId: ' + req.session.sessionUser.ssoId);
+                userModel.isFree(req.session.sessionUser.ssoId, params.compilation).then(function(rst) {
+                    // console.log('is Free user? ' + rst);
+                    if (rst) {
+                        //加水印!
+                        // fillWaterMark([pageRst]);
+                    }
+                    callback(req, res, err, pageRst);
+                });
+            } catch (error) {
+                //
+            } finally {
+                //callback(req, res, err, pageRst);
+            }
         });
     },
     getMultiReports: function (req, res) {
@@ -698,105 +714,6 @@ module.exports = {
 
         })
 
-    },
-
-    getTestReportAllPages: function(req, res){
-        let rpt_id = req.body.ID;
-        let pageSize = req.body.pageSize;
-        getAllPagesCommonOrg(rpt_id, pageSize, JV.PAGING_OPTION_NORMAL, function(err, pageRst){
-            //fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
-            callback(req, res, err, pageRst);
-        })
-    },
-    getTestExcel: function(req, res) {
-        let rpt_id = req.params.id,
-            pageSize = req.params.size,
-            rptName = req.params.rptName,
-            isOneSheet = req.params.isOneSheet,
-            option = req.params.option;
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        getAllPagesCommonOrg(rpt_id, pageSize, dftOption, function(err, pageRst){
-            fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
-            try {
-                rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, null, null, function(uuidName){
-                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + uuidName + '.xlsx');
-                    filestream.on('data', function(chunk) {
-                        res.write(chunk);
-                    });
-                    filestream.on('end', function() {
-                        res.end();
-                    });
-                });
-            } catch (e) {
-                console.log(e);
-            }
-        })
-    },
-    getTestExcelInOneBook: function(req, res) {
-        let rpt_ids = req.params.ids.split(','),
-            pageSize = req.params.size,
-            rptName = req.params.rptName,
-            option = req.params.option;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let id of rpt_ids) {
-            parallelFunctions.push((function (rpt_id) {
-                return function (cb) {
-                    getAllPagesCommonOrg(rpt_id, pageSize, dftOption, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        }
-                        else{
-                            cb(null, pageRst);
-                        }
-                    })
-                }
-            })(parseInt(id)));
-        }
-        async.parallel(parallelFunctions, function (err, pageRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                rpt_xl_util.exportExcelInOneBook(pageRstArray, pageSize, rptName, function(tmpFilePath){
-                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + tmpFilePath + '.xlsx');
-                    filestream.on('data', function(chunk) {
-                        res.write(chunk);
-                    });
-                    filestream.on('end', function() {
-                        res.end();
-                    });
-                });
-                //callback(req, res, false, '', {compilation: rst, gljLibs: gljLibsRst});
-            }
-        })
-    },
-    getTestPDF:function (req, res) {
-        let rpt_id = req.params.id,
-            pageSize = req.params.size,
-            rptName = req.params.rptName;
-
-        getAllPagesCommonOrg(rpt_id, pageSize, JV.PAGING_OPTION_NORMAL, function(err, pageRst){
-            rpt_pdf_util.export_pdf_file(pageRst, pageSize, rptName,function (uuidName) {
-                res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                // res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".pdf");
-                let rptNameURI = encodeURI(rptName);
-                res.setHeader("Content-Disposition", "attachment; filename=\"" + rptNameURI + ".pdf\"; filename*=utf-8''" + rptNameURI + ".pdf"  );
-
-                let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + uuidName + '.pdf');
-                filestream.on('data', function(chunk) {
-                    res.write(chunk);
-                });
-                filestream.on('end', function() {
-                    res.end();
-                });
-            })
-
-        })
-
     }
 };
 

+ 0 - 5
modules/reports/routes/report_router.js

@@ -18,11 +18,6 @@ module.exports =function (app) {
         }
     });
 
-    //test
-    rptRouter.post('/getTestReport', reportController.getTestReportAllPages);
-    rptRouter.get('/getTestExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getTestExcel);
-    rptRouter.get('/getTestExcelInOneBook/:ids/:size/:rptName/:option', reportController.getTestExcelInOneBook);
-    rptRouter.get('/getTestPDF/:id/:size/:rptName', reportController.getTestPDF);
     //now is the real:
     rptRouter.post('/getReport', reportController.getReportAllPages);
     rptRouter.post('/getReportSvg', reportController.getReportAllPagesSvg);

+ 7 - 2
public/web/gljUtil.js

@@ -128,8 +128,13 @@ let gljUtil = {
             }
         }
         let coe = 1;
-        coe = ration.quantityCoe&&this.isNotEmpty(ration.quantityCoe[coeField])?ration.quantityCoe[coeField]:1;
-        coe = parseFloat(coe);
+        if (!calcTools.isTenderProjectGLJ(ration_glj)){
+            coe = 1;
+        }
+        else{
+            coe = ration.quantityCoe&&this.isNotEmpty(ration.quantityCoe[coeField])?ration.quantityCoe[coeField]:1;
+            coe = parseFloat(coe);
+        }
         if (coe == 0) coe = 1;
         let glj_quantity = scMathUtil.roundForObj(ration_glj.quantity, q_decimal);
         return scMathUtil.roundForObj(glj_quantity * coe,q_decimal);

+ 5 - 0
public/web/rpt_value_define.js

@@ -150,6 +150,7 @@ const JV = {
     PROP_PREFIX: "Prefix",
     PROP_SUFFIX: "Suffix",
     PROP_FORMAT: "Format",
+    PROP_WATERMARK: 'WaterMark',
 
     PROP_SHOW_ZERO: "ShowZero",
     PROP_EXTENSION_TYPE: "ExtType",
@@ -325,6 +326,10 @@ const JV = {
     ANTI_VERTICAL_ANGLE: "-90",
     VERTICAL_ANGLE_INT: 90,
     ANTI_VERTICAL_ANGLE_INT: -90,
+    WATER_MARK_ANGLE: "45",
+    ANTI_WATER_MARK_ANGLE: "-45",
+    WATER_MARK_ANGLE_INT: 45,
+    ANTI_WATER_MARK_ANGLE_INT: -45,
 
     LAST_DEF: ""
 };

+ 3 - 0
web/building_saas/main/js/main.js

@@ -24,6 +24,9 @@ $(function () {
         rationLibObj.refreshSpread();
         subObj.initGljSubTab();
         subObj.initQDSubTab();
+        if($('#linkJSCX').hasClass('active'))
+            calcProgramObj.refreshCalcProgram(projectObj.project.mainTree.selected, 2);
+
         //refreshSubSpread();
     });
 

+ 1 - 1
web/building_saas/main/js/views/project_glj_view.js

@@ -1122,7 +1122,7 @@ let projectGljObject={
             }
             info.sheet.resumeEvent();
             info.sheet.resumePaint();
-            if (dataCode === 'supply' || dataCode === 'supply_quantity'){    // basePrice、marketPrice 有自己的计算代码,无需走这里重复计算
+            if (dataCode === 'supply' || dataCode === 'supply_quantity' || dataCode === 'is_adjust_price'){    // basePrice、marketPrice 有自己的计算代码,无需走这里重复计算
                 let rations = calcTools.getRationsByProjectGLJ(recode.id);
                 projectObj.project.calcProgram.calcNodesAndSave(rations, function () {
                     projectObj.mainController.refreshTreeNode(projectObj.project.mainTree.roots);

+ 1 - 0
web/building_saas/main/js/views/tender_price_view.js

@@ -530,6 +530,7 @@ $(function () {
     $('#cbShowTenderFields').on('click', function () {
         let showFields = $('#cbShowTenderFields').prop("checked");
         projectObj.project.saveProperty('tenderSetting.showTenderFields', showFields);
+        projectObj.project.property.tenderSetting.showTenderFields = showFields;
         gljCol.showTenderFields(showFields, true);
     });
 

+ 7 - 0
web/building_saas/report/js/jpc_output.js

@@ -200,6 +200,13 @@ let JpcCanvasOutput = {
             } else if (font.FontAngle === JV.ANTI_VERTICAL_ANGLE) {
                 ctx.rotate(-Math.PI/2);
             }
+            if (font.FontAngle === JV.WATER_MARK_ANGLE) {
+                ctx.rotate(Math.PI/4);
+                ctx.fillStyle = font.FontColor;
+            } else if (font.FontAngle === JV.ANTI_WATER_MARK_ANGLE) {
+                ctx.rotate(-Math.PI/4);
+                ctx.fillStyle = font.FontColor;
+            }
             if (validAreaTxtWidth >= ctx.measureText(val).width ||
                 (control && control.Shrink !== 'T' && validTxtLines < private_splitString(val, validAreaTxtWidth, ctx)) ) {
                 if (font[JV.FONT_PROPS[5]] === 'T' && parseInt(font.FontAngle) === 0) {

+ 5 - 1
web/building_saas/report/js/jpc_output_value_define.js

@@ -66,5 +66,9 @@ let JV = {
     VERTICAL_ANGLE_INT: 90,
     ANTI_VERTICAL_ANGLE_INT: -90,
     VERTICAL_ANGLE: "90",
-    ANTI_VERTICAL_ANGLE: "-90"
+    ANTI_VERTICAL_ANGLE: "-90",
+    WATER_MARK_ANGLE: "45",
+    ANTI_WATER_MARK_ANGLE: "-45",
+    WATER_MARK_ANGLE_INT: 45,
+    ANTI_WATER_MARK_ANGLE_INT: -45
 };

+ 3 - 0
web/building_saas/report/js/rpt_main.js

@@ -274,6 +274,7 @@ let zTreeOprObj = {
     },
     requestReport: function (params) {
         let me = zTreeOprObj;
+        params.compilation = projectObj.project.projectInfo.compilation;
         hintBox.waitBox();
         CommonAjax.postEx("report_api/getReport", params, 15000, true,
             function(result){
@@ -508,6 +509,7 @@ let rptControlObj = {
             params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
             params.custCfg = zTreeOprObj.reportPageCfg;
             params.option = "normal";
+            params.compilation = projectObj.project.projectInfo.compilation;
             CommonAjax.postEx("report_api/createPdfFiles", params, WAIT_TIME_EXPORT, true, function(result){
                     if (result) {
                         let uuIdUrls = [];
@@ -556,6 +558,7 @@ let rptControlObj = {
                 rpt_names.push(tplNode.name);
             }
             params.rpt_ids = rptIds.join(",");
+            params.compilation = projectObj.project.projectInfo.compilation;
             CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
                 function(result){
                     $.bootstrapLoading.end();