Jelajahi Sumber

还原部分代码

MaiXinRong 2 tahun lalu
induk
melakukan
7cdcd6f9bf

+ 24 - 0
app/controller/tender_controller.js

@@ -220,6 +220,30 @@ module.exports = app => {
             }
         }
 
+        async _listCache(view, renderData, modal = '', list_status = '') {
+            try {
+                renderData.tenderList = await this.ctx.service.tender.getList(list_status, renderData.userPermission, this.ctx.session.sessionUser.is_admin);
+
+                for (const t of renderData.tenderList) {
+                    t.visitor = (await this.ctx.service.tenderTourist.getTourists(t.id)).map(x => { return x.user_name; });
+                    await this.ctx.service.tenderCache.loadTenderCache(t, this.ctx.session.sessionUser.accountId);
+                }
+                renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
+                renderData.valuations = await this.ctx.service.valuation.getProjectValidValuation(this.ctx.session.sessionProject.id);
+                renderData.tenderConst = tenderConst;
+                renderData.settingConst = settingConst;
+                renderData.measureType = tenderConst.measureType;
+                renderData.jsFiles = this.app.jsFiles.common.concat(this.jsFiles);
+                renderData.auditConst = auditConst;
+                renderData.uid = this.ctx.session.sessionUser.accountId;
+                renderData.pid = this.ctx.session.sessionProject.id;
+                await this.layout(view, renderData, modal);
+            } catch (err) {
+                this.log(err);
+                this.ctx.redirect('/dashboard');
+            }
+        }
+
         async _list(view, renderData, modal = '', list_status = '') {
             try {
                 renderData.tenderList = await this.ctx.service.tender.getList(list_status, renderData.userPermission, this.ctx.session.sessionUser.is_admin);

+ 15 - 5
app/public/js/tender_list.js

@@ -315,15 +315,25 @@ function recursiveGetTenderNodeHtml (node, arr, pid) {
     // 计量期数
     html.push('<td style="width: 9%" class="text-center">');
     if (!node.cid) {
-        html.push(node.lastStage ? '第' + node.lastStage.order + '期' : '台账');
+        if (node.progress) {
+            html.push(node.progress.title === '台账' ? '' : node.progress.title);
+        } else {
+            html.push(node.lastStage ? '第' + node.lastStage.order + '期' : '台账');
+        }
     }
     html.push('</td>');
     // 审批状态
     html.push('<td style="width: 15%">');
-    html.push(`<span class="${node.lastStage ? auditConst.stage.tiStatusStringClass[node.lastStage.status] : auditConst.ledger.tiStatusStringClass[node.ledger_status]}">`);
-    html.push(node.lastStage ? auditConst.stage.statusString[node.lastStage.status] : auditConst.ledger.statusString[node.ledger_status]);
-    html.push('</span>');
-    html.push(node.status_users ? '(' + node.status_users + ')' : '');
+    if (!node.cid && node.cur_flow) {
+        if (node.stage_status !== undefined) {
+            html.push(`<span class="${node.progress.status_class}">${node.progress.status}</span>(${node.cur_flow.name})`);
+        } else {
+            html.push(`<span class="${node.lastStage ? auditConst.stage.tiStatusStringClass[node.lastStage.status] : auditConst.ledger.tiStatusStringClass[node.ledger_status]}">`);
+            html.push(node.lastStage ? auditConst.stage.statusString[node.lastStage.status] : auditConst.ledger.statusString[node.ledger_status]);
+            html.push('</span>');
+            html.push(node.status_users ? '(' + node.status_users + ')' : '');
+        }
+    }
     html.push('</td>');
     html.push('</tr>');
     if (node.children) {

+ 5 - 1
app/public/js/tender_list_manage.js

@@ -283,7 +283,11 @@ function recursiveGetTenderNodeHtml (node, arr, pid) {
     // 完成期数
     html.push('<td style="width: 10%" class="text-center">');
     if (!node.cid) {
-        html.push(node.lastStage ? '第' + node.lastStage.order + '期' : '第0期');
+        if (node.progress) {
+            html.push(node.progress.title);
+        } else {
+            html.push(node.lastStage ? '第' + node.lastStage.order + '期' : '第0期');
+        }
     }
     html.push('</td>');
     // 管理

+ 28 - 56
app/service/budget_permission.js

@@ -20,86 +20,72 @@ module.exports = app => {
          */
         constructor(ctx) {
             super(ctx);
-            this.tableName = 'sub_project_permission';
-            this.BudgetPermissionConst = {
+            this.tableName = 'budget_permission';
+            this.PermissionConst = {
                 view: { title: '查看', value: 1 },
                 edit: { title: '编辑', value: 2 },
             };
-            this.FilePermissionConst = {
-                view: { title: '查看', value: 1 },
-                upload: { title: '上传文件', value: 2 },
-                edit: { title: '文件类别编辑', value: 3 },
-            };
-            this.ManagePermissionConst = {
-                rela: { title: '关联标段', value: 1 },
-            };
         }
 
-        async showSubTab(uid, type) {
-            const sql = `SELECT count(*) FROM ${this.tableName} WHERE ${type}_permission <> '' AND uid = ?`;
-            const result = await this.db.queryOne(sql, [uid]);
-            return result.count;
-        }
         async showBudget(uid) {
-            return await this.showSubTab(uid, 'budget');
-        }
-        async showFile(uid) {
-            return await this.showSubTab(uid, 'file');
+            const count = await this.count({ pid: this.ctx.session.sessionProject.id, uid });
+            return count > 0;
         }
 
-        parsePermission(data) {
+        async getBudgetPermission(bid) {
             const _ = this.ctx.helper._;
-            const datas = data instanceof Array ? data : [data];
-            datas.forEach(x => {
-                x.budget_permission = x.budget_permission ? _.map(x.budget_permission.split(','), _.toInteger) : [];
-                x.file_permission = x.file_permission ? _.map(x.file_permission.split(','), _.toInteger) : [];
-                x.manage_permission = x.manage_permission ? _.map(x.manage_permission.split(','), _.toInteger) : [];
+            const result = await this.db.query(`SELECT bp.*, p.name, p.role 
+                FROM ${this.tableName} bp LEFT JOIN ${this.ctx.service.projectAccount.tableName} p
+                On bp.uid = p.id WHERE bid = ?`, [bid]);
+            result.forEach(x => {
+                x.permission = x.permission ? _.map(x.permission.split(','), _.toInteger) : []
             });
-        }
-
-        async getBudgetPermission(subProjectId) {
-            const result = await this.db.query(`SELECT spp.*, p.name, p.role 
-                FROM ${this.tableName} spp LEFT JOIN ${this.ctx.service.projectAccount.tableName} p
-                On spp.uid = p.id WHERE spp.spid = ? and budget_permission <> ''`, [subProjectId]);
-            this.parsePermission(result);
             return result;
         }
 
         async getUserPermission() {
+            const _ = this.ctx.helper._;
             const result = await this.getAllDataByCondition({
                 where: { uid: this.ctx.session.sessionUser.accountId, pid: this.ctx.session.sessionProject.id }
             });
-            this.parsePermission(result);
+            result.forEach(x => {
+                x.permission = x.permission ? _.map(x.permission.split(','), _.toInteger) : []
+            });
             return result;
         }
 
         async getBudgetUserPermission(bid) {
             const _ = this.ctx.helper._;
             const result = await this.getDataByCondition({uid: this.ctx.session.sessionUser.accountId, bid});
-            if (result) this.parsePermission(result);
+            if (result) result.permission = result.permission ? _.map(result.permission.split(','), _.toInteger) : [];
             return result;
         }
 
-        async saveBudgetPermission(subProjectId, member) {
-            const orgMember = await this.getAllDataByCondition({ where: { spid: subProjectId } });
-            const um = [], im = [];
+        async saveBudgetPermission(bid, member) {
+            const orgMember = await this.getAllDataByCondition({ where: { bid } });
+            const dm = [], um = [], im = [], cur = new Date();
             for (const om of orgMember) {
-                const nm = member.find(x => { return om.uid === x.uid; });
+                const nm = member.find(x => { return om.uid === x.uid });
                 if (!nm) {
-                    um.push({ id: om.id, budget_permission: '' });
+                    dm.push(om.id);
                 } else {
-                    um.push({ id: om.id, budget_permission: nm.permission.join(',') });
+                    um.push({
+                        id: om.id,
+                        permission: nm.permission.join(','),
+                        modify_time: cur,
+                    });
                     member.splice(member.indexOf(nm), 1);
                 }
             }
             for (const m of member) {
                 im.push({
-                    spid: subProjectId, pid: this.ctx.session.sessionProject.id, uid: m.uid,
-                    budget_permission: m.permission.join(',')
+                    pid: this.ctx.session.sessionProject.id, bid, uid: m.uid,
+                    permission: m.permission.join(','), in_time: cur, modify_time: cur,
                 })
             }
             const conn = await this.db.beginTransaction();
             try {
+                if (dm.length > 0) await conn.delete(this.tableName, { id: dm });
                 if (um.length > 0) await conn.updateRows(this.tableName, um);
                 if (im.length > 0) await conn.insert(this.tableName, im);
                 await conn.commit();
@@ -108,20 +94,6 @@ module.exports = app => {
                 throw err;
             }
         }
-
-        async saveFilePermission(subProjectId, uid, permission) {
-            const member = await this.getDataByCondition({ where: { spid: subProjectId, uid } });
-            if (!permission) {
-                if (!member) return;
-                await this.defaultUpdate({ id: member.id, file_permission: '', manager_permission: '' });
-            } else {
-                if (!member) {
-                    await this.db.insert(this.tableName, { spid: subProjectId, uid, pid: this.ctx.sessionProject.id, ...permission });
-                } else {
-                    await this.db.update(this.tableName, { id: member.id, ...permission });
-                }
-            }
-        }
     }
 
     return BudgetPermission;

+ 35 - 29
db_script/tender_cache.js

@@ -37,12 +37,27 @@ const { app, assert } = require('egg-mock/bootstrap');
 //         }
 //     });
 // });
+const iBegin = 0;
+//const iBegin = 5000;
+//const iBegin = 10000;
+const tenderRange = [
+    [iBegin + 0, iBegin + 500],
+    [iBegin + 500, iBegin + 1000],
+    [iBegin + 1000, iBegin + 1500],
+    [iBegin + 1500, iBegin + 2000],
+    [iBegin + 2000, iBegin + 2500],
+    [iBegin + 2500, iBegin + 3000],
+    [iBegin + 3000, iBegin + 3500],
+    [iBegin + 3500, iBegin + 4000],
+    [iBegin + 4000, iBegin + 4500],
+    [iBegin + 4500, iBegin + 5000]
+];
 
 describe('refreshTenderCache.js', () => {
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [0, 500]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[0]);
+        console.log(tenderRange[0], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -50,8 +65,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [500, 1000]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[1]);
+        console.log(tenderRange[1], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -59,8 +74,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [1000, 1500]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[2]);
+        console.log(tenderRange[2], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -68,8 +83,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [1500, 2000]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[3]);
+        console.log(tenderRange[3], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -77,8 +92,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [2000, 2500]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[4]);
+        console.log(tenderRange[4], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -86,8 +101,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [2500, 3000]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[5]);
+        console.log(tenderRange[5], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -95,8 +110,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [3000, 3500]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[6]);
+        console.log(tenderRange[6], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -104,8 +119,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [4000, 4500]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[7]);
+        console.log(tenderRange[7], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -113,8 +128,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [4500, 5000]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[8]);
+        console.log(tenderRange[8], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);
@@ -122,17 +137,8 @@ describe('refreshTenderCache.js', () => {
     });
     it('refreshTenderCache', function* () {
         const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [5000, 5500]);
-        console.log(tenders.length);
-        for (const t of tenders) {
-            yield ctx.service.tenderCache.refreshTenderCache(t);
-            console.log(`complete ${t.name}(${t.id})`);
-        }
-    });
-    it('refreshTenderCache', function* () {
-        const ctx = app.mockContext();
-        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id < ?', [5500, 6000]);
-        console.log(tenders.length);
+        const tenders = yield ctx.app.mysql.query('SELECT * FROM zh_tender WHERE id > ? and id <= ?', tenderRange[9]);
+        console.log(tenderRange[9], tenders.length);
         for (const t of tenders) {
             yield ctx.service.tenderCache.refreshTenderCache(t);
             console.log(`complete ${t.name}(${t.id})`);