Przeglądaj źródła

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

# Conflicts:
#	modules/users/models/user_model.js
#	web/users/html/user-buy.html
vian 5 lat temu
rodzic
commit
b6b8da7bef

+ 4 - 1
modules/all_models/user.js

@@ -30,7 +30,10 @@ let upgrade = mongoose.Schema({
     upgrade_time:Number,
     isUpgrade:Boolean,
     remark:String, //描述:广东办刘飞 2018-06-17 启用/关闭
-    deadline: String,
+    deadline: {
+        type:String,
+        default: '',
+    },
 }, { _id: false })
 
 const userdList = mongoose.Schema({

+ 2 - 1
modules/pm/models/project_property_template.js

@@ -10,7 +10,8 @@ const defaultDecimal = {
     feeRate: 3,
     quantity_detail: 4,
     material:5,//三材系数
-    process: 6
+    process: 6,
+    marketPriceProcess:2
 };
 const displaySetting = {
     autoHeight:true,

+ 1 - 0
modules/reports/rpt_component/jpc_flow_tab.js

@@ -612,6 +612,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 while (true) {
                     if (currentRecAmt > 0) pageStatus[JV.STATUS_SEGMENT_START] = false;
                     if (pageIdx > 0) pageStatus[JV.STATUS_REPORT_START] = false;
+                    private_resetBandArea(); // 这里得预先算maxRowRec(实际数据情况,会有章首页框,在章数据多的情况下,章第二页开始就得补上章首页框不显示遗留下来的row)
                     //开始判断各种scenarios
                     adHocAutoHeightAmt = 0;
                     if (me.auto_height_fields_idx.length > 0) {

+ 2 - 1
modules/users/controllers/boot_controller.js

@@ -32,7 +32,8 @@ class BootController extends BaseController {
             let compilationData = await compilationModel.getCompilationById(compilationId);
             // 判断当前用户的是使用免费版还是专业版
             compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, compilationId);
-            request.session.compilationVersion = compilationVersion;
+            request.session.compilationVersion = compilationVersion.version;
+            request.session.sessionUser.compilationDeadline = compilationVersion.deadline;
             request.session.sessionCompilation = compilationData;
             if(sessionUser.latest_used !== compilationId) userModel.updateLatestUsed(sessionUser.id,compilationId);
         }

+ 0 - 52
modules/users/controllers/cld_controller.js

@@ -13,7 +13,6 @@ import UserModel from "../models/user_model"
 import CompilationModel from "../models/compilation_model";
 let online_facade = require('../facade/online_facade');
 const SMS = require('../models/sms');
-const moment = require('moment');
 
 class CLDController {
 
@@ -313,57 +312,6 @@ class CLDController {
         }
         response.json(responseData);
     }
-
-    async checkUserCompilationStatus(request, response) {
-        try {
-            let today = moment(new Date()-86400*1000).format('YYYY-MM-DD');
-            let userModel = new UserModel();
-            let userList = await userModel.getDeadlineList({upgrade_list: {$elemMatch:{ deadline: today }}});
-            if (userList.length > 0) {
-                for (let user of userList) {
-                    for (let cul of user.upgrade_list) {
-                        if (cul.deadline === today) {
-                            // cul.deadline = '';
-                            cul.isUpgrade = false;
-                        }
-                    }
-                    let condition = {ssoId: user.ssoId};
-                    await userModel.updateUser(condition, {upgrade_list: user.upgrade_list});
-                }
-            }
-            response.json({error: 0, msg: 'success', data: userList});
-        } catch (error) {
-            response.json({error: 1, msg: error});
-        }
-    }
-
-    async sendCompilationStatusSms(request, response) {
-        try {
-            let today = moment(new Date()-86400*1000).format('YYYY-MM-DD');
-            let userModel = new UserModel();
-            let userList = await userModel.getDeadlineList({upgrade_list: {$elemMatch:{ deadline: today }}});
-            if (userList.length > 0) {
-                let compilationModel = new CompilationModel();
-                const Sms = new SMS();
-                for (let user of userList) {
-                    for (let cul of user.upgrade_list) {
-                        if (cul.deadline === today) {
-                            cul.deadline = '';
-                            // cul.isUpgrade = false;
-                            // 发送短信
-                            let compilationData = await compilationModel.getCompilationById(cul.compilationID);
-                            await Sms.sendProductMsg(user.mobile, 2, user.real_name, compilationData.name, '');
-                        }
-                    }
-                    let condition = {ssoId: user.ssoId};
-                    await userModel.updateUser(condition, {upgrade_list: user.upgrade_list});
-                }
-            }
-            response.json({error: 0, msg: 'success', data: userList});
-        } catch (error) {
-            response.json({error: 1, msg: error});
-        }
-    }
 }
 
 export default CLDController;

+ 4 - 2
modules/users/controllers/login_controller.js

@@ -100,7 +100,8 @@ class LoginController {
                     let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                     // 判断当前用户的是使用免费版还是专业版
                     let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
-                    request.session.compilationVersion = compilationVersion;
+                    request.session.compilationVersion = compilationVersion.version;
+                    request.session.sessionUser.compilationDeadline = compilationVersion.deadline;
                     request.session.sessionCompilation = compilationData;
                     if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
                 }
@@ -273,7 +274,8 @@ class LoginController {
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                 // 判断当前用户的是使用免费版还是专业版
                 let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
-                request.session.compilationVersion = compilationVersion;
+                request.session.compilationVersion = compilationVersion.version;
+                request.session.sessionUser.compilationDeadline = compilationVersion.deadline;
                 request.session.sessionCompilation = compilationData;
                 if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
             }

+ 2 - 1
modules/users/controllers/user_controller.js

@@ -235,7 +235,8 @@ class UserController extends BaseController {
                 // 判断当前用户的是使用免费版还是专业版
                 let userModel = new UserModel();
                 let compilationVersion = await userModel.getVersionFromUpgrade(sessionUserData.ssoId, compilationData._id);
-                request.session.compilationVersion = compilationVersion;
+                request.session.compilationVersion = compilationVersion.version;
+                request.session.sessionUser.compilationDeadline = compilationVersion.deadline;
                 request.session.sessionCompilation = compilationData;
             }
         } catch (error) {

+ 5 - 17
modules/users/models/user_model.js

@@ -348,6 +348,7 @@ class UserModel extends BaseModel {
      */
     async getVersionFromUpgrade(ssoId, compilationId) {
         let version = '纵横公路养护云造价(学习版)';//'纵横公路养护造价(免费云版)'; 2019-03-28 需求修改,听说不知道多久的以后还会改回来--勿删!!!!!
+        let deadline = '';
         let userData = await this.findDataBySsoId(ssoId);
         if (userData.upgrade_list !== undefined) {
             let compilationInfo = userData.upgrade_list.find(function (item) {
@@ -355,9 +356,12 @@ class UserModel extends BaseModel {
             });
             if (compilationInfo !== undefined && compilationInfo.isUpgrade === true) {
                 version = '纵横公路养护云造价(专业版)';
+                if (compilationInfo.deadline !== undefined && compilationInfo.deadline !== '') {
+                    deadline = compilationInfo.deadline;
+                }
             }
         }
-        return version;
+        return {version: version, deadline: deadline};
     }
 
     /**
@@ -522,22 +526,6 @@ class UserModel extends BaseModel {
         return this.dayMsg[index];
     }
 
-    /**
-     * 获取usercompilation到期列表
-     *
-     * @param {object} condition
-     * @param {number} page
-     * @param {Number} pageSize
-     * @return {promise}
-     */
-    async getDeadlineList(condition = null) {
-
-        let userList = await this.db.find(condition);
-        userList = userList.length > 0 ? userList : [];
-
-        return userList;
-    }
-
 }
 
 export default UserModel;

+ 0 - 4
modules/users/routes/cld_route.js

@@ -30,9 +30,5 @@ module.exports = function (app) {
 
     router.post('/getUserOnlineInfo', cldController.getUserOnlineInfo);
 
-    router.get('/checkUserCompilationStatus', cldController.checkUserCompilationStatus);
-
-    router.get('/sendCompilationStatusSms', cldController.sendCompilationStatusSms);
-
     app.use('/cld',router)
 };

Plik diff jest za duży
+ 2897 - 2828
package-lock.json


+ 2 - 2
public/web/gljUtil.js

@@ -275,7 +275,7 @@ let gljUtil = {
         let price_decimal = decimalObj.glj.unitPrice;
         let price_hasM_decimal = decimalObj.glj.unitPriceHasMix?decimalObj.glj.unitPriceHasMix:decimalObj.glj.unitPrice;
         let quantity_decimal = decimalObj.glj.quantity;
-        let process_decimal = decimalObj.process;
+        let process_decimal = this.isDef(decimalObj.marketPriceProcess)?decimalObj.marketPriceProcess: decimalObj.process;//20200722  旧的项目还是默认6位,新的用两位
         let priceCoe = this.isDef(tenderCoe)?tenderCoe:1;
         if (!this.isConcreteType(glj.unit_price.type)&& this.notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于机械台班等有组成物的材料,价格需根据组成物计算得出(排除混凝土、配合比、砂浆这几个类型直接为0)。
             let p =0;
@@ -335,7 +335,7 @@ let gljUtil = {
         let decimal = decimalObj.glj.unitPrice;
         let price_hasM_decimal = decimalObj.glj.unitPriceHasMix?decimalObj.glj.unitPriceHasMix:decimalObj.glj.unitPrice;
         let quantity_decimal =  decimalObj.glj.quantity;
-        let process_decimal = decimalObj.process;
+        let process_decimal = this.isDef(decimalObj.marketPriceProcess)?decimalObj.marketPriceProcess: decimalObj.process;
         let  tem_decimal = isRadio==true?process_decimal:decimal;
         if (glj.unit_price.type == this.gljType.LABOUR || glj.unit_price.type == this.gljType.MACHINE_LABOUR) {//人工、机上人工,调整价根据定额价*调整系数计算得出。
             let labour = _.find(labourCoeDatas.coes,{'ID':glj.adjCoe});

+ 71 - 0
web/building_saas/img/base_controller.js

@@ -0,0 +1,71 @@
+/**
+ * 控制器基类
+ *
+ * @author CaiAoLin
+ * @date 2017/6/29
+ * @version
+ */
+import Moment from "moment";
+import Url from "url";
+import UserMessageModel from "../../users/models/user_message_model";
+
+class BaseController {
+
+    /**
+     * 页面title
+     *
+     * @var string
+     */
+    title = '';
+
+    /**
+     * 初始化函数
+     *
+     * @param {object} request
+     * @param {object} response
+     * @param {function} next
+     * @return {void}
+     */
+    async init(request, response, next) {
+        // 获取当前控制器和动作名称
+        let urlInfo = Url.parse(request.originalUrl, true);
+        let url = urlInfo.pathname.substr(1);
+        let actionInfo = url.split('/');
+        let controller = 'index';
+        let action = 'index';
+        switch (actionInfo.length) {
+            case 1:
+                controller = actionInfo[0];
+                break;
+            case 2:
+                controller = actionInfo[0];
+                action = actionInfo[1];
+                break;
+            default:
+                controller = actionInfo[0];
+                break;
+        }
+        response.locals.controller = controller;
+        response.locals.action = action;
+
+        // moment工具
+        response.locals.moment = Moment;
+
+        // url相关数据
+        response.locals.urlQuery = JSON.stringify(urlInfo.query);
+
+        // 获取当前用户数据
+        let sessionUser = request.session.sessionUser;
+
+        // 获取当前用户消息数量
+        let userMessageModel = new UserMessageModel();
+        // 消息处理
+        await userMessageModel.initMessage(sessionUser.id);
+        // 获取未读数据
+        let messageUnreadCount = await userMessageModel.count({user_id: sessionUser.id, is_read: 0, is_delete: 0});
+        response.locals.unreadCount = messageUnreadCount;
+        next();
+    }
+}
+
+export default BaseController;

BIN
web/building_saas/img/vip.png


BIN
web/building_saas/img/vip1.png


BIN
web/building_saas/img/vip2.png


+ 2 - 1
web/building_saas/main/js/views/project_property_decimal_view.js

@@ -12,7 +12,8 @@ let defaultDecimal = {
         material: {editable: false, data: 5},
         feeRate: {editable: true, data: 3},
         quantity_detail: {editable: false, data: 4},
-        process: {editable: false, data: 6}
+        process: {editable: false, data: 6},
+        marketPriceProcess:{editable: false, data: 2}
     }
 };
 

+ 26 - 6
web/building_saas/report/js/rpt_main.js

@@ -1075,10 +1075,15 @@ let rptControlObj = {
                         $.bootstrapLoading.end();
                         me._hidePdfIniPage();
                         let pageSize = rptControlObj.getCurrentPageSize();
+                        let rstRptNames = [];
                         for (let idx = 0; idx < result.length; idx++) {
-                            let pageData = result[idx];
-                            JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
+                            rstRptNames.push(result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
                         }
+                        downloadPDFReport(result, pageSize, rstRptNames);
+                        // for (let idx = 0; idx < result.length; idx++) {
+                        //     let pageData = result[idx];
+                        //     JpcJsPDFHelper.outputAsPdf(pageData, pageSize, result[idx][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
+                        // }
                     },
                     function(failRst){
                         $.bootstrapLoading.end();
@@ -1114,10 +1119,11 @@ let rptControlObj = {
                                 $.bootstrapLoading.end();
                                 me._hidePdfIniPage();
                                 let pageSize = rptControlObj.getCurrentPageSize();
-                                for (let idx = 0; idx < result.length; idx++) {
-                                    let pageData = result[idx];
-                                    JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
-                                }
+                                downloadPDFReport(result, pageSize, rpt_names);
+                                // for (let idx = 0; idx < result.length; idx++) {
+                                //     let pageData = result[idx];
+                                //     JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
+                                // }
                             },
                             function(failRst){
                                 $.bootstrapLoading.end();
@@ -1241,6 +1247,20 @@ let rptControlObj = {
     }
 };
 
+function downloadPDFReport(pageDataArr, pageSize, rpt_names) {
+    rptControlObj.currentDownloadIdx = 0;
+    const private_download = function() {
+        if (rptControlObj.currentDownloadIdx < pageDataArr.length) {
+            let pageData = pageDataArr[rptControlObj.currentDownloadIdx];
+            let rptName = rpt_names[rptControlObj.currentDownloadIdx];
+            rptControlObj.currentDownloadIdx++;
+            JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName);
+            if (rptControlObj.currentDownloadIdx < pageDataArr.length) setTimeout(private_download, 1000);
+        }
+    }
+    private_download();
+}
+
 function downloadReport(urls) {
     //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理
     rptControlObj.currentDownloadUrl = null;

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

@@ -38,9 +38,15 @@
             </li>
             <% if (!versionName.includes('学习')) {%>
             <li class="nav-item">
-              <a href="user/buy" target="_blank"><img src="/web/building_saas/img/vip.png" data-toggle="tooltip" data-placement="bottom" data-original-title="专业版用户"></a>
-            </li> 
-            <% } %>  
+              <a href="/user/buy" target="_blank">
+                  <% if (sessionUser.compilationDeadline !== '') { %>
+                  <img src="/web/building_saas/img/vip2.png" data-toggle="tooltip" data-placement="bottom" data-original-title="年限版用户">
+                  <% } else { %>
+                  <img src="/web/building_saas/img/vip.png" data-toggle="tooltip" data-placement="bottom" data-original-title="专业版用户">
+                  <% } %>
+              </a>
+            </li>
+            <% } %>
             <% if (action === 'index' && controller === 'main') {%>
             <li class="nav-item dropdown">
                 <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench" data-placement="bottom"></i> 工具</a>

+ 1 - 1
web/over_write/js/zhejiang_2005.js

@@ -271,7 +271,7 @@ if (typeof gljOprObj !== 'undefined') {
 if (typeof gljUtil !== 'undefined') {
     gljUtil.getCodeSortMath = getCodeSortMath;
     gljUtil.getElecCoe = function () {
-        return 0.24;
+        return 0.34;
     }
     gljUtil.getElecCode = function () {
         return "267";

+ 24 - 13
web/users/html/user-buy.html

@@ -48,16 +48,16 @@
                         </div> -->
                         <legend class=" mb-4">激活专业版</legend>
                         <div class="row">
-                            <div class="col-sm-4 mb-5">
+                            <div class="col-sm-5 mb-5">
                                 <div class="card free-version">
                                   <div class=" card-body">
                                     <h3 class="card-title">学习版 </h3>
-                                      <p class="card-text">
+                                      <!--<p class="card-text">-->
                                     <!--  <ul class="pl-3">
                                           <li>只可创建 50 个单位工程</li>
                                           <li>报表带水印</li>
                                       </ul>-->
-                                      </p>
+                                      <!--</p>-->
                                   </div>
                                     <ul class="list-group list-group-flush">
                                         <% if (compilationList.length > 0) {%>
@@ -73,30 +73,41 @@
                                     </ul>
                                 </div>
                             </div>
-                            <div class="col-sm-4 mb-5">
+                            <div class="col-sm-5 mb-5">
                                 <div class="card pro-version">
                                   <div class=" card-body">
                                     <h3 class="card-title">
-                                      <img src="/web/building_saas/img/vip.png">
                                       专业版
+                                        <img src="/web/building_saas/img/vip.png" data-toggle="tooltip" data-placement="bottom" data-original-title="专业版用户">
+                                        <img src="/web/building_saas/img/vip2.png" data-toggle="tooltip" data-placement="bottom" data-original-title="年限版用户">
                                     </h3>
-                                      <p class="card-text">
+                                      <!--<p class="card-text">-->
                                       <!--<ul class="pl-3">
                                           <li>创建单位工程无限制</li>
                                           <li>报表无水印</li>
                                       </ul>-->
-                                      </p>
+                                      <!--</p>-->
                                   </div>
                                     <ul class="list-group list-group-flush">
                                         <% if (compilationList.length > 0) {%>
                                         <% compilationList.forEach(function(compilation) { %>
                                         <li class="list-group-item d-flex justify-content-between">
-                                            <%= compilation.name %>
-                                            <% if (compilation.isUpgrade === undefined || compilation.isUpgrade !== true) { %>
-                                            <a href="javascript:void(0);" class="btn btn-primary btn-sm getcategory" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>">立即激活</a>
-                                            <% } else { %>
-                                            <a href="javascript:void(0);" class="btn btn-outline-secondary btn-sm getcategory" data-title="<%= compilation.name %>" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>"><i class="fa fa-check"></i> 已激活</a>
-                                            <% } %>
+                                            <div class="col-6">
+                                                <%= compilation.name %>
+                                                <% if (compilation.isUpgrade !== undefined && compilation.isUpgrade === true && compilation.deadline !== undefined && compilation.deadline !== '') { %>
+                                                <img src="/web/building_saas/img/vip2.png" data-toggle="tooltip" data-placement="bottom" data-original-title="年限版用户">
+                                                <% } else if (compilation.isUpgrade !== undefined && compilation.isUpgrade === true && (compilation.deadline === undefined || compilation.deadline === '')) { %>
+                                                <img src="/web/building_saas/img/vip.png" data-toggle="tooltip" data-placement="bottom" data-original-title="专业版用户">
+                                                <% } %>
+                                            </div>
+                                            <div class="ml-auto text-right">
+                                                <% if (compilation.isUpgrade === undefined || compilation.isUpgrade !== true) { %>
+                                                <a href="javascript:void(0);" class="btn btn-primary btn-sm getcategory" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>">立即激活</a>
+                                                <% } else { %>
+                                                <a href="javascript:void(0);" class="btn btn-outline-secondary btn-sm getcategory" data-title="<%= compilation.name %>" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>"><i class="fa fa-check"></i> 已激活</a>
+                                                <% if (compilation.deadline !== undefined && compilation.deadline !== '') { %><span class="d-block text-muted">到期:<%= compilation.deadline %></span><% } %>
+                                                <% } %>
+                                            </div>
                                         </li>
                                         <% }) %>
                                         <% } %>