浏览代码

Merge branch 'master' of http://smartcost.in.8866.org:26903/SmartCost/ConstructionCost

vian 5 年之前
父节点
当前提交
894b27035f

+ 14 - 0
modules/users/models/compilation_model.js

@@ -26,6 +26,20 @@ class CompilationModel extends BaseModel {
      *
      * @return {Promise}
      */
+    async getCompilationList(fields = null) {
+        // 筛选字段
+        let field = fields == null ?{_id: 1, name: 1, is_release: 1, categoryID: 1, description: 1,overWriteUrl: 1,example: 1, "ration_valuation.id": 1, "ration_valuation.name": 1, "ration_valuation.enable": 1,
+            "bill_valuation.id": 1, "bill_valuation.name": 1, "bill_valuation.enable": 1}:fields;
+        let compilationData = await this.findDataByCondition({name: {$ne: ''}}, field, false);
+
+        return compilationData === null ? [] : compilationData;
+    }
+
+    /**
+     * 获取编办列表
+     *
+     * @return {Promise}
+     */
     async getList() {
         // 筛选字段
         let field = {_id: 1, name: 1, is_release: 1, description: 1, categoryID: 1};

+ 105 - 0
modules/users/models/user_model.js

@@ -36,6 +36,13 @@ class UserModel extends BaseModel {
      */
     companyScale = ['1-50', '50-100', '100-500', '500+'];
 
+    /**
+     * 最近天数
+     *
+     * @var
+     */
+    dayMsg = ['所有', '最近24小时', '最近3天', '最近7天', '最近30天'];
+
 
     /**
      * 构造函数
@@ -388,6 +395,104 @@ class UserModel extends BaseModel {
         const users = await this.model.find({_id: {$in: userIDList}}, 'real_name mobile company');
         return users;
     }
+
+    /**
+     * 获取列表
+     *
+     * @param {object} condition
+     * @param {number} page
+     * @param {Number} pageSize
+     * @return {promise}
+     */
+    async getList(condition = null, page = 1, pageSize = 30, sort = {_id:-1}) {
+        page = parseInt(page);
+        page = page <= 1 ? 1 : page;
+        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize), sort: sort};
+
+        let userList = await this.db.find(condition, null, option);
+        userList = userList.length > 0 ? userList : [];
+
+        return userList;
+    }
+
+    /**
+     * 获取过滤条件
+     *
+     * @return {Object}
+     */
+    getFilterCondition(request) {
+        let condition = {};
+        let regtime = request.query.regtime;
+        regtime = regtime !== '' && regtime !== undefined ? parseInt(regtime) : 0;
+        if (regtime !== 0) {
+            condition.create_time = this.getTimestamp(regtime);
+        }
+
+        //最近登录时间
+        let loginTime = request.query.loginTime;
+        loginTime = loginTime !== '' && loginTime !== undefined ? parseInt(loginTime) : 0;
+        if (loginTime !== 0) {
+            condition.latest_login = this.getTimestamp(loginTime);
+        }
+
+        let version = request.query.version;
+        if(version !== '' && version !== undefined) {
+            condition.version = version;
+        }
+        // 已升级费用定额
+        let upGrade = request.query.upGrade;
+        if(upGrade !== '' && upGrade !== undefined){
+            condition.upgrade_list = {"$elemMatch":{"compilationID":upGrade,"isUpgrade":true}};
+        }
+
+        // 最近使用费用定额
+        let latestUsed = request.query.latestUsed;
+        if(latestUsed !== '' && latestUsed !== undefined){
+            condition.latest_used = latestUsed;
+        }
+
+        let keyword = request.query.keyword;
+        if (keyword !== '' && keyword !== undefined) {
+            condition.$or = [{real_name : {$regex: keyword}},{email : {$regex: keyword}},{mobile : {$regex: keyword}},{company : {$regex: keyword}}];
+        }
+
+        return condition;
+    }
+
+    /**
+     * 获取时间戳区间
+     *
+     * @return {Object}
+     */
+    getTimestamp(type) {
+        let startTime = '';
+        switch (type) {
+            case 1 :
+                startTime = Date.parse(new Date())-86400*1000;
+                break;
+            case 2 :
+                startTime = Date.parse(new Date())-86400*1000*3;
+                break;
+            case 3 :
+                startTime = Date.parse(new Date())-86400*1000*7;
+                break;
+            case 4 :
+                startTime = Date.parse(new Date())-86400*1000*30;
+                break;
+            default :
+                break;
+        }
+        let endTime =  Date.parse(new Date());
+        return startTime === '' ? '' : {'$gte': startTime, '$lt': endTime};
+    }
+
+    /**
+     * 获取daymsg
+     *
+     */
+    getDayMsg(index){
+        return this.dayMsg[index];
+    }
 }
 
 export default UserModel;

+ 53 - 1
web/building_saas/main/html/main.html

@@ -105,7 +105,7 @@
                     <a class="dropdown-toggle" href="#" data-toggle="dropdown"><i class="fa  fa-code-fork"></i></a>
                     <div class="dropdown-menu" id="exportMenu">
                         <a class="dropdown-item" href="#export" data-toggle="modal" data-target="#export">导出<%= region %>电子招投标数据文件</a>
-                        <a class="dropdown-item" href="javascript:void(0)" id="SEIMenu"  >导出<%= region %>指标成果文件</a>
+                        <a class="dropdown-item" href="#exportIndex"  data-toggle="modal" data-target="#exportIndex" >导出<%= region %>指标成果文件</a>
                     </div>
                 </span>
                       <% } %>
@@ -2142,6 +2142,37 @@
         </div>
     </div>
 </div>
+
+<!--弹出 数据接口导出-->
+<div class="modal fade" id="exportIndex" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title"><%= region %>指标成果文件接口<!-- 重庆其他电子招投标数据接口 --></h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <!--检测提醒-->
+                <div class="card">
+                    <div class="card-body">
+                        <h5 class="card-title">导出<%= region %>电子招投标数据接口文件</h5>
+                        <p class="card-text">导出之前,建议您执行项目自检功能,避免出现错误。</p>
+                        <a id="export-index-check" href="javascript:void(0);" class="btn btn-primary">自检</a>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <a id="export-index-confirm" href="javascript:void(0);" class="btn btn-primary">确定导出</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
 <!--设置导出工程编号-->
 <div class="modal fade" id="exportCode" data-backdrop="static">
     <div class="modal-dialog" role="document">
@@ -2156,6 +2187,27 @@
                 <div class="modal-auto-height" style="overflow: hidden" id="exportSpread">
                 </div>
                 <p>*工程编号作为单项、单位工程的标识,要求在建设项目下唯一。</p>
+
+
+                <div class="form-group" style="">
+                    <div class="form-check ml-4">
+                        <input class="form-check-input" type="checkbox"  id="sei1" checked>
+                        <label class="form-check-label" for="sei1">
+                            投标文件
+                        </label>
+                        <small class="form-text text-muted">投标工程数据文件</small>
+                        <input class="form-check-input" type="checkbox"  id="sei2" checked>
+                        <label class="form-check-label" for="sei2">
+                            投标文件
+                        </label>
+                        <small class="form-text text-muted">投标工程数据文件</small>
+                        <input class="form-check-input" type="checkbox"  id="sei3" checked>
+                        <label class="form-check-label" for="sei3">
+                            投标文件
+                        </label>
+                        <small class="form-text text-muted">投标工程数据文件</small>
+                    </div>
+                </div>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-primary" id="exportCode-confirm">确定</button>

+ 98 - 29
web/over_write/js/chongqing_2018_export_sei.js

@@ -26,40 +26,92 @@ let exportUtil = {
     }
 };
 
-async function exportSEI(projectID) {
+let SEIObject = {};
 
-    let tenderProjects = [];
-    let errorMap = {};
-    let result = await ajaxPost("/project/getSEIProjects",{projectID:projectID});
+async function selfChecking(projectID,exprotCall=false) {//自检和正式导出共用接口
     let pr = new SCComponent.InitProgressBar();
-    pr.start('导出数据接口', '正在导出文件,请稍候……');
-    let project = getProject(result);
-    await prepareTenderDatas(tenderProjects,project);
+   if(!exprotCall) pr.start('导出数据接口', '正在自检,请稍候……');
 
-    if(!_.isEmpty(errorMap)){
-        showError(errorMap);
-        return pr.end();
+    //先检查招投标数据  - todo
+
+    //检查重庆指标接口数量
+    if(_.isEmpty(SEIObject.errorMap)){
+        let [errorMap,SEIFile] = await getSEIIndexFile(projectID);
+        if(errorMap) {
+            SEIObject.errorMap = errorMap;
+        }else {
+            SEIObject.fileCache.push(SEIFile);
+        }
     }
+    _.isEmpty(SEIObject.errorMap)?alert("自检完成,未检测到错误数据。"): showExportError(SEIObject.errorMap);
+    SEIObject.selfChecked = true;
+    if(!exprotCall) pr.end();
+}
 
-    toXml(project);
 
-    pr.end();
+async function exportSEI(projectID){
+    if(!_.isEmpty(SEIObject.errorMap)) return showExportError(SEIObject.errorMap);//如果自检的时候已经有错误,直接提示;
+    let pr = new SCComponent.InitProgressBar();
+    pr.start('导出数据接口', '正在导出文件,请稍候……');
+    SEIObject.exporting = true;
+    try {
+        if(!SEIObject.selfChecked){//没有经过自检,则从招投标接口开始取数据
+            await selfChecking(projectID,true);
+            if(!_.isEmpty(SEIObject.errorMap)) return  pr.end();
+        }
+        //导出建设项目数据
+        //导出压缩包
+       // saveZBFX(SEIObject.fileCache);
+
+    }catch (e){
+        console.log(e);
+    }finally {
+        pr.end();
+        $('#exportCode').modal('show');
+        //SEIObject.exporting = false;
+    }
 
-    
-    function showError(errorMap) {
-        let infoList = [];
-        for(let name in errorMap){
-            infoList.push(`<span style="font-weight: bold">单位工程“${name}”下:</span>`);
-            for(let err of errorMap[name]){
-                infoList.push(err);
-            }
+
+    async function saveZBFX(fileData) {
+        let zip = new JSZip();
+        for (let file of fileData) {
+            zip.file(file.fileName, file.blob, {binary: true});
         }
-        if(infoList.length > 20){
-            $('#hintBox_caption').addClass('export-check');
+        let zipFile = await zip.generateAsync({type: 'blob'});
+        saveAs(zipFile, '经济指标.ZBFX');
+    }
+
+}
+
+function showExportError(errorMap) {
+    let infoList = [];
+    for(let name in errorMap){
+        infoList.push(`<span style="font-weight: bold">单位工程“${name}”下:</span>`);
+        for(let err of errorMap[name]){
+            infoList.push(err);
         }
-        let msg = infoList.join(`<br>`);
-        alert(msg);
     }
+    if(infoList.length > 20){
+        $('#hintBox_caption').addClass('export-check');
+    }
+    let msg = infoList.join(`<br>`);
+    alert(msg);
+}
+
+async function getSEIIndexFile(projectID) {
+
+    let tenderProjects = [];
+    let errorMap = {};
+    let result = await ajaxPost("/project/getSEIProjects",{projectID:projectID});
+    let project = getProject(result);
+    await prepareTenderDatas(tenderProjects,project);
+
+    if(!_.isEmpty(errorMap)){
+        return [errorMap,null];
+    }
+    let file = toXml(project);
+
+    return [null,file];
 
     function getProject(orignal) {//取建设项目信息
         let basicInformation = getBaseInfo(orignal);
@@ -515,15 +567,32 @@ async function exportSEI(projectID) {
          //格式化
          xmlStr = formatXml(xmlStr);
          let blob = new Blob([xmlStr], {type: 'text/plain;charset=utf-8'});
-         saveAs(blob, '经济指标.ZBF');
+         return {
+             blob: blob,
+             fileName: "经济指标.ZBF"
+         };
+         //saveAs(blob, '经济指标.ZBF');
      }
 
 }
 
 $(function () {
-   $("#SEIMenu").click(async function () {
-       await exportSEI(projectObj.project.property.rootProjectID);
-       $("#exportMenu").removeClass("show");
-   })
+
+    $("#export-index-check").click( function (){
+        selfChecking(projectObj.project.property.rootProjectID);
+    });
+    $("#export-index-confirm").click(async function (){
+        await  exportSEI(projectObj.project.property.rootProjectID);
+       // $("#exportIndex").modal("hide");
+    });
+
+    $('#exportIndex').on('hide.bs.modal', function() {
+        SEIObject = {
+            exporting:false,
+            fileCache:[],
+            errorMap:{},
+            selfChecked:false
+        }
+    })
 
 });