Przeglądaj źródła

Merge branch 'budget' of http://192.168.1.41:3000/SmartCost/ConstructionCost into budget

TonyKang 4 lat temu
rodzic
commit
57c32d718f

Plik diff jest za duży
+ 7 - 4
config/config.js


+ 4 - 3
config/db/db_manager.js

@@ -47,8 +47,9 @@ module.exports = {
          //*/
     },
     connect:function (env="local") {
-        var config = require("../config.js");
-        var dbURL = 'mongodb://' + config[env].server + ":" + config[env].port + '/scConstruct';
+        let config = require("../config.js");
+        let dbName = config[env].dbName?config[env].dbName:'scConstruct';
+        let dbURL = 'mongodb://' + config[env].server + ":" + config[env].port + '/'+dbName;
         if(config[env].dbURL){
             mg.connect(config[env].dbURL,{connectTimeoutMS: 100000,useMongoClient: true});
         } else if(config[env].options){
@@ -56,7 +57,7 @@ module.exports = {
         }else {
             mg.connect(dbURL,{connectTimeoutMS: 100000,useMongoClient: true});//useMongoClient': true*! //报 DeprecationWarning: `open()` is deprecated in mongoose这个错
         }
-        var db = mg.connection;
+        let db = mg.connection;
         db.on("error",function (err) {
             console.log('Could not connect to MongoDB!');
             console.log(err);

+ 2 - 1
importserver.js

@@ -66,7 +66,8 @@ app.use(function(err, req, res, next) {
 //备注: 经过测试nodejs 8.9.3版本不支持eval的方式修改prototype,为兼容考虑,把方法调整到stringUtil文件里
 require('./public/stringUtil').setupDateFormat();
 
-app.listen(6050, function(){
+let importPort = config[process.env.NODE_ENV].importPort?config[process.env.NODE_ENV].importPort:6050; 
+app.listen(importPort, function(){
     console.log('import server started!');
 });
 

+ 1 - 1
modules/main/controllers/info_price_controller.js

@@ -36,7 +36,7 @@ module.exports = {
             let functionName = req.url.replace(/\//g,"");
             result.data = controller[functionName]?await controller[functionName](req):"";
         }catch (err){
-            logger.err(err);
+            logger.err(err.stack);
             result.error=1;
             result.message = err.message;
         }

+ 2 - 2
modules/main/facade/info_price_facade.js

@@ -114,7 +114,7 @@ async function getDataByCondition(data,compilation){
     if (result.totalSize > 0) return result;
 
     //如果分类编码有结果,但是确没有匹配的条数,说明关键字没匹配上,直接返回没有信息价
-    if(result.allItems > 0 && result.totalSize === 0){
+    if(result.allItems.length > 0 && result.totalSize === 0){
       return result;
     }
 
@@ -160,7 +160,7 @@ async function getDataByCode(code, data) {
     }
   }
   //没有完全匹配的,分词匹配关键字
-  if (items.length === 0){
+  if (items.length === 0 && data.keyWord){
     let nameArray =  nodejieba.cut(data.keyWord);
     nameArray = cusSegment(nameArray,data.keyWord);
     let result = getMatchPrice(allItems,nameArray);

+ 1 - 0
modules/main/routes/main_route.js

@@ -53,6 +53,7 @@ module.exports =function (app) {
                         projectReadOnly: projectReadOnly,
                         projectCooperate: projectCooperate,
                         allowCopy: allowCopy||false,
+                        socketPort:config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:3300,
                         LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
                         overWriteUrl:req.session.sessionCompilation.overWriteUrl,
                         fileKind: fileKind,

+ 1 - 0
modules/pm/controllers/pm_controller.js

@@ -373,6 +373,7 @@ module.exports = {
             engineeringList: JSON.stringify(engineering.List),
             compilationName: sessionCompilation.name,
             versionName: request.session.compilationVersion,
+            socketPort:config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:3300,
             LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
         };
 

+ 13 - 3
modules/pm/facade/pm_facade.js

@@ -503,6 +503,12 @@ async function getShareInfoAfterChangePermission(permissionType, receiver, proje
     return [];
 }
 
+// 拷贝概算汇总清单
+async function copyBudgetSummaryBills(orgConstructionID, newConstructionID) {
+    const billsMap = await createIDsAndReturn(orgConstructionID,billsModel);
+    await copyBills(newConstructionID, billsMap);
+}
+
 //拷贝例题项目
 //@param {String}userID {Array}projIDs拷贝的例题项目ID(建设项目、文件夹)@return {Boolean}
 async function copyExample(userID, compilation, projIDs,nameMap){
@@ -558,6 +564,10 @@ async function copyExample(userID, compilation, projIDs,nameMap){
         data.compilation = compilation;
         data.shareInfo = [];
         if (data.projType !== projectType.tender) {
+            if (data.projType === projectType.project) {
+                // 拷贝概算汇总清单
+                await copyBudgetSummaryBills(orgID, data.ID);
+            }
             let newData = _.cloneDeep(data);
             delete newData._id;
           //  await projectModel.create(newData);
@@ -1430,7 +1440,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
                 }
             }
         }
-        IDMapping[project.ID] = { engineeringCost: summaryMap[project.ID].totalFee || 0, rate: summaryMap[project.ID].rate || 0, buildingArea: grossArea, perCost: ''};
+        IDMapping[project.ID] = { engineeringCost: +summaryMap[project.ID].totalFee || 0, rate: summaryMap[project.ID].rate || 0, buildingArea: grossArea, perCost: ''};
     }
 
     //单项工程
@@ -1440,7 +1450,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
     
     for(let eng of engineerings){
         engIDs.push(eng.ID);
-        IDMapping[eng.ID] = {engineeringCost: summaryMap[eng.ID].totalFee || 0, rate: summaryMap[eng.ID].rate || 0, buildingArea: '', perCost: ''};
+        IDMapping[eng.ID] = {engineeringCost: +summaryMap[eng.ID].totalFee || 0, rate: summaryMap[eng.ID].rate || 0, buildingArea: '', perCost: ''};
     }
     //单位工程
     if(engIDs.length > 0){
@@ -1450,7 +1460,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
     if(tenders.length > 0){
         for(let tender of tenders){
             tenderIDs.push(tender.ID);
-            IDMapping[tender.ID] = {engineeringCost: summaryMap[tender.ID].totalFee || 0, rate: summaryMap[tender.ID].rate || 0,buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
+            IDMapping[tender.ID] = {engineeringCost: +summaryMap[tender.ID].totalFee || 0, rate: summaryMap[tender.ID].rate || 0,buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
             let buildingArea = getBuildingArea(tender.property.projectFeature);
             if(buildingArea){
                 IDMapping[tender.ID]['buildingArea'] = buildingArea;

+ 1 - 0
modules/pm/models/project_model.js

@@ -132,6 +132,7 @@ ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, cal
         callback(0, '', projects);
     }
     catch (err) {
+        console.log(err.stack);
         callback(1, 'Error', null);
     }
 };

+ 1 - 0
modules/unit_price_file/controllers/unit_price_controller.js

@@ -49,6 +49,7 @@ module.exports={
           unitpriceList:JSON.stringify(unitpriceList),
           gljTypeMap:JSON.stringify(gljTypeMap),
           mixRatioMap:JSON.stringify(mixRatioMap),
+          socketPort:config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:3300,
           LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
         });
     },

+ 4 - 1
public/web/socket/connection.js

@@ -8,7 +8,10 @@ socketObject = {
         // 连接socket服务器
         var hostName = window.location.hostname;
         let me = this;
-        let port = window.location.protocol === 'http:' ? 3300 : 3301;
+        let socketPort = parseInt($("#socketPort").val());
+        if(!socketPort) socketPort= 3300;
+        let port = window.location.protocol === 'http:' ? socketPort : socketPort+1;
+        if(port === 6601) port = 6600//概算特殊处理
         socket = io(window.location.protocol + '//' + hostName + ':' + port);
         socket.on('connect', function () {
             if (from == 'pm') {

+ 3 - 1
server.js

@@ -85,7 +85,9 @@ app.use(function(err, req, res, next) {
 //备注: 经过测试nodejs 8.9.3版本不支持eval的方式修改prototype,为兼容考虑,把方法调整到stringUtil文件里
 require('./public/stringUtil').setupDateFormat();
 
-app.listen(6060, function(){
+let startPort = 6060;
+if(config[process.env.NODE_ENV].startPort) startPort = config[process.env.NODE_ENV].startPort;
+app.listen(startPort, function(){
     console.log('server started!');
 });
 

+ 3 - 1
socket.js

@@ -8,8 +8,10 @@
 const socket = require('socket.io');
 const moment = require('moment');
 const { PageTarget } = require('./public/common_constants');
+let config = require("./config/config.js");
+let socketPort = config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:3300; 
 
-const socketIO = socket(3300);
+const socketIO = socket(socketPort);
 
 const userCache = {};
 

Plik diff jest za duży
+ 2887 - 2748
web/building_saas/main/js/models/calc_program.js


+ 6 - 6
web/building_saas/main/js/views/project_view.js

@@ -2035,8 +2035,9 @@ var projectObj = {
             }
         }
         //选中的都是数字, 如果不为0则悬浮显示
-        if (notNumber === false && total > 0 && counter > 1) {
-            const div = $('<div id="total-tips"><p>合计: <input type="text" id="total" readonly="readonly" style="border: none;"/></p><p><a href="javascript:void(0);">复制</a></p></div>');
+        if (notNumber === false && total > 0 && counter > 1) {//
+            const totalString = total.toFixed(max);
+            const div = $(`<div id="total-tips"><p>合计:<label id="total">${totalString}</label> </p><p><a href="javascript:void(0);">复制</a></p></div>`);
             div.css({
                 position: "absolute",
                 border: "1px #C0C0C0 solid",
@@ -2051,7 +2052,7 @@ var projectObj = {
             div.children("p").first().css({
                 borderBottom: "1px #C0C0C0 solid"
             });
-            const totalString = total.toFixed(max);
+           
             // input长度
             const inputWidth = totalString.length * 8;
             // 计算是否会超出显示范围
@@ -2070,7 +2071,7 @@ var projectObj = {
                 top: y,
             });
 
-            div.children().children("#total").width(inputWidth).val(totalString);
+            div.children().children("#total").val(totalString);
             $("body").append(div);
             // 用于判断是否要关闭窗体
             setTimeout(function() {
@@ -2362,8 +2363,7 @@ var projectObj = {
 // 点击合计框中的复制
 $("body").on("click", "#total-tips a", function() {
     const totalElement = $(this).parent().siblings("p").find("#total");
-    totalElement.select();
-    document.execCommand("Copy");
+    sheetCommonObj.copyTextToClipboard(totalElement.text());
     $(this).text("已复制");
 });
 // 合计框点击其他位置关闭

+ 6 - 2
web/building_saas/pm/js/pm_newMain.js

@@ -3083,7 +3083,9 @@ async function init(refresh = false, callback, expandCallback) {
             await ajaxPost('/pm/api/prepareInitialData', {user_id: userID});
             await importProcessChecking(null, null, () => {
                 initProjects(() => {
-                    $.bootstrapLoading.progressEnd();
+                    setTimeout(function () {
+                        $.bootstrapLoading.progressEnd();//不做这个的话太快,页面不会自动关闭
+                    }, 500);
                     if (callback) {
                         callback();
                     }
@@ -4969,7 +4971,9 @@ async function importProcessChecking(key, processingFunc = null, completeFunc =
                 if (completeFunc) {
                     completeFunc(result.data);
                 }
-                $.bootstrapLoading.progressEnd();
+                setTimeout(function () {
+                    $.bootstrapLoading.progressEnd();//不做这个的话太快,页面不会自动关闭
+                }, 500);
                 //refreshAllPage();
             }
         }

+ 3 - 0
web/building_saas/unit_price_file/index.html

@@ -61,6 +61,9 @@
                 </button>
                 <strong id="message"></strong>-
             </div>
+            <% if(typeof socketPort != 'undefined'){ %>
+                <input id="socketPort" value="<%= socketPort %>" type="hidden">
+            <% } %>
         </div>
         <nav class="navbar navbar-expand-lg p-0 d-flex <%= versionName.includes('免费') ? 'free-version' : 'pro-version' %>">
           <div class="unit_price_header header-logo ">

+ 3 - 0
web/common/html/header.html

@@ -1,4 +1,7 @@
 <img id="f_btn" src="/web/dest/css/img/feeRate_btn.jpg" alt="" style="display: none" />
+<% if(typeof socketPort != 'undefined'){ %>
+    <input id="socketPort" value="<%= socketPort %>" type="hidden">
+<% } %>
 <!-- <nav class="navbar p-0 "> -->
 <div class="top-msg clearfix">
     <div class="alert alert-warning alert-dismissible" role="alert" id="notify" style="display: none">