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

Merge branch 'master' into new-node-version

Conflicts:
	modules/reports/controllers/rpt_controller.js
zhangweicheng преди 4 години
родител
ревизия
33ad5665eb

+ 0 - 3
modules/glj/routes/glj_router.js

@@ -31,9 +31,6 @@ router.post('/batchUpdateConsumption', gljController.init, gljController.batchUp
 router.post('/modifyKeyValue',gljController.init, gljController.modifyKeyValue);
 router.post('/updateEvaluateMaterial', gljController.updateEvaluateMaterial);
 
-
-
-
 router.get('/test', gljController.init, gljController.test);
 router.get('/testModify', gljController.init, gljController.testModify);
 router.get('/testDelete', gljController.init, gljController.delete);

+ 30 - 47
modules/pm/facade/pm_facade.js

@@ -2477,36 +2477,36 @@ async function downLoadProjectFile(info) {
 }
 
 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);
-                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}]下载失败,请稍后再试。` });
-        });
+  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){
@@ -2814,23 +2814,6 @@ async function handleEachProject(data,projectIDMap,labourCoeFileIDMap,calcProgra
 
     return [newProjectSetting,bills,rations,installationFees,projectGLJs,rationGLJs,rationCoes,quantityDetails,rationInstallations,rationTemplates,evaluateList,bidList,contractorList,newCalcProgramsFile,newLabourCoe]
 
- /*    if(newProjectSetting) await projectSettingModel.create(newProjectSetting);
-    if(bills.length > 0) await insertMany(bills,billsModel);
-    if(rations.length > 0) await insertMany(rations,rationModel);
-    if(installationFees.length > 0) await insertMany(installationFees,installationFeeModel);
-    if(projectGLJs.length > 0) await insertMany(projectGLJs,gljListModel);
-    if(rationGLJs.length > 0) await insertMany(rationGLJs,rationGLJModel);
-    if(rationCoes.length > 0) await insertMany(rationCoes,rationCoeModel);
-    if(quantityDetails.length > 0) await insertMany(quantityDetails,quantityDetailModel);
-    if(rationInstallations.length > 0) await insertMany(rationInstallations,rationInstallationModel);
-    if(rationTemplates.length > 0) await insertMany(rationTemplates,rationTemplateModel);
-    if(evaluateList.length > 0) await insertMany(evaluateList,evaluateListModel);
-    if(bidList.length > 0) await insertMany(bidList,bidListModel);
-    if(contractorList.length > 0) await insertMany(contractorList,contractorListModel);
-    if(newCalcProgramsFile) await calcProgramsModel.create(newCalcProgramsFile);
-    if(newLabourCoe) await labourCoesModel.create(newLabourCoe); */
- 
-
 }
 function setMaterialList(datas,newProjectID,projectGLJIDMap){
     let arrs = [];

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

@@ -37,7 +37,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 +361,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 +377,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 +395,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 +713,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: ""
 };

+ 1 - 2
web/building_saas/glj/html/project_glj.html

@@ -66,8 +66,7 @@
                             <button type="button" class="btn btn-outline-primary btn-sm" id = "filterAgain">重新过滤</button>
                            <!-- <button type="button" class="btn btn-outline-primary btn-sm" id = "autoRelated">自动关联招标材料</button>-->
                         </div>
-                        <div class="main-data-bottom" id="related_sheet" style="overflow:hidden">
-                        </div>
+                        <div class="main-data-bottom" id="related_sheet" style="overflow:hidden"></div>
                     </div>
                 </div>
             </div>

+ 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();
     });
 

+ 2 - 10
web/building_saas/main/js/views/project_glj_view.js

@@ -711,15 +711,7 @@ let projectGljObject={
         this.materialTreeController.setTreeSelected(this.materialTree.items[sel.row==-1?0:sel.row]);
     },
     initSheetViews:function(){
-        let me = projectGljObject;
-      /*  if(me.displayType == filterType.AMAE){
-            $('#material_adjust').show();
-            $('#adjustType').show();
-            let adjustType = projectObj.project.projectInfo.property.gljAdjustType || 'priceInfo';
-            $('#adjustType').val(adjustType);
-            $('#project-glj-main').hide();
-            $('#config_material').hide();
-        }else*/
+      let me = projectGljObject;
       if(me.displayType == filterType.AMAE || me.displayType == filterType.ZGCL || me.displayType == filterType.PBCL){
             $('#adjustType').hide();
             if(me.displayType == filterType.AMAE){
@@ -1130,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();