Selaa lähdekoodia

台账,新增节点,从redis或者mySql,获取新增节点ID

MaiXinRong 7 vuotta sitten
vanhempi
commit
16a83db93c
3 muutettua tiedostoa jossa 56 lisäystä ja 20 poistoa
  1. 49 14
      app/service/tender_node.js
  2. 2 1
      package.json
  3. 5 5
      test/app/service/tender_node.test.js

+ 49 - 14
app/service/tender_node.js

@@ -53,6 +53,7 @@ module.exports = app => {
                         insertData.push(tmp);
                     }
                     const operate = await this.transaction.insert(this.tableName, insertData);
+                    this.transaction.commit();
                     result = operate.affectedRows > 0;
                 } else {
                     // 对象则单个插入
@@ -156,6 +157,19 @@ module.exports = app => {
         }
 
         /**
+         * 从数据库获取标段的最大节点id
+         * @param {Number} tenderId - 标段id
+         * @return {Number}
+         * @private
+         */
+        async _getMaxNodeId(tenderId) {
+            const sql = 'SELECT Max(??) As max_id FROM ?? Where tender_id = ' + tenderId;
+            const sqlParam = ['template_id', this.tableName];
+            const queryResult = await this.db.queryOne(sql, sqlParam);
+            return queryResult.max_id;
+        }
+
+        /**
          * 根据selectData, data 新增数据
          * @param {Number} tenderId - 标段id
          * @param {Object} selectData - 选中节点的数据
@@ -170,14 +184,23 @@ module.exports = app => {
             if (!data) {
                 data = {};
             }
+            const cacheKey = 'tender_node_maxId:' + tenderId;
+            let maxId = parseInt(await this.cache.get(cacheKey));
+            if (!maxId) {
+               maxId = await this._getMaxNodeId(tenderId);
+               this.cache.set(cacheKey, maxId, 'EX', this.ctx.app.config.cacheTime);
+            }
+
             data.tender_id = tenderId;
-            data.template_id = 15;
+            data.template_id = maxId + 1;
             data.template_pid = selectData.template_pid;
             data.level = selectData.level;
             data.order = selectData.order + 1;
             data.full_path = selectData.full_path.replace(selectData.template_id, data.template_id);
             const result = await this.transaction.insert(this.tableName, data);
 
+            this.cache.set(cacheKey, maxId + 1, 'EX', this.ctx.app.config.cacheTime);
+
             return result;
         }
 
@@ -190,32 +213,44 @@ module.exports = app => {
          */
         async addNode(tenderId, selectId, data) {
             if ((tenderId <= 0) || (selectId <= 0)) {
-                return undefined;
+                return [];
             }
             const selectData = await this.getDataByNodeId(tenderId, selectId);
             this.transaction = await this.db.beginTransaction();
 
-            let resultData = [];
             if (selectData) {
                 try {
                     // 选中节点的所有后兄弟节点,order+1
-                    const updateData = await this._updateSelectNextsOrder(selectData);
-                    console.log(updateData);
+                    await this._updateSelectNextsOrder(selectData);
                     // 数据库创建新增节点数据
-                    const addData = await this._addNodeData(tenderId, selectData, data);
-                    console.log(addData);
-                    resultData = await this.transaction.commit();
-                    console.log(resultData);
-
-                    resultData.concat(updateData, addData);
+                    await this._addNodeData(tenderId, selectData, data);
+                    await this.transaction.commit();
                 } catch (err) {
                     await this.transaction.rollback();
                     throw err;
                 }
-            } else {
-                throw '新增节点数据错误';
+
+                // 查询应返回的结果
+                this.initSqlBuilder();
+                this.sqlBuilder.setAndWhere('tender_id', {
+                    value: selectData.tender_id,
+                    operate: '=',
+                });
+                this.sqlBuilder.setAndWhere('template_pid', {
+                    value: selectData.template_pid,
+                    operate: '=',
+                });
+                this.sqlBuilder.setAndWhere('order', {
+                    value: selectData.order,
+                    operate: '>',
+                });
+                const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+                const resultData = this.db.query(sql, sqlParam);
+
+                return resultData;
             }
-            return resultData;
+            throw '新增节点数据错误';
+
         }
     }
 

+ 2 - 1
package.json

@@ -35,7 +35,8 @@
     "stop": "egg-scripts stop",
     "dev": "egg-bin dev --port 7002",
     "test": "npm run lint -- --fix && npm run test-local",
-    "test-local": "egg-bin test",
+    "test-local": "set EGG_SERVER_ENV=local&& egg-bin test",
+    "test-qa": "set EGG_SERVER_ENV=qa&& egg-bin test",
     "cov": "egg-bin cov",
     "lint": "eslint .",
     "ci": "npm run lint && npm run cov",

+ 5 - 5
test/app/service/tender_node.test.js

@@ -8,7 +8,7 @@
  */
 'use strict';
 
-/*const testNodeData = [
+/* const testNodeData = [
     { template_id: 1, template_pid: -1, order: 1, level: 1, full_path: '1', code: '1' },
     { template_id: 2, template_pid: 1, order: 1, level: 2, full_path: '1.2', code: '1-1' },
     { template_id: 6, template_pid: 2, order: 1, level: 3, full_path: '1.2.6', code: '1-1-1' },
@@ -24,7 +24,7 @@
     { template_id: 4, template_pid: 1, order: 3, level: 2, full_path: '1.4', code: '1-3' },
     { template_id: 5, template_pid: 1, order: 4, level: 2, full_path: '1.5', code: '1-4' },
 ];*/
-let testNodeData = [
+const testNodeData = [
     { template_id: 1, template_pid: -1, order: 1, level: 1, full_path: '1', code: '1' },
     { template_id: 2, template_pid: 1, order: 1, level: 2, full_path: '1.2', code: '1-1' },
     { template_id: 6, template_pid: 2, order: 1, level: 3, full_path: '1.2.6', code: '1-1-1' },
@@ -47,13 +47,13 @@ const { app, assert } = require('egg-mock/bootstrap');
 describe('test/app/service/tender_node.test.js', () => {
     it('clear history test data', function* () {
         const ctx = app.mockContext();
-        const result = yield ctx.service.tenderNode.db.delete(ctx.service.tenderNode.tableName, {"tender_id": testTenderId});
-        assert(result.affectedRows > 0);
+        const result = yield ctx.service.tenderNode.db.delete(ctx.service.tenderNode.tableName, { tender_id: testTenderId });
+        assert(result.affectedRows >= 0);
     });
 
     it('add test data', function* () {
         const ctx = app.mockContext();
-        for (let data of testNodeData) {
+        for (const data of testNodeData) {
             data.tender_id = testTenderId;
         }
         const result = yield ctx.service.tenderNode.db.insert(ctx.service.tenderNode.tableName, testNodeData);