赞助
 server.js文件
const dao = require("../dao/user.dao");
saveDat是个对象自己处理一下
if (updataFlag) {//编辑角色
         result = await dao.roleUpdata(saveDta);
      } else {//新增角色
         saveDta.role.create_name = user.name;
         saveDta.role.code = need.code;
         result = await dao.roleAdd(saveDta);
      }

      return result;

编辑角色

dao文件就是上面引入的文件 
roleUpdata(need) {
     const dcMeun = "表名"
      let list = [];//编辑过来的先删除库里面的按角色code删除所有
      let roleProductMap = db.remove(dcMeun, {
         role_code: need.code
      }, true)
      list.push({
         sql: roleProductMap.sql,
         param: roleProductMap.param
      })
      //如果有选择产品 往库里面批量增加
      if (Array.isArray(need.products) && need.products.length > 0) {
         let addProduct = db.bulkCreate(dcMeun, need.products, true)
         list.push({
            sql: addProduct.sql,
            param: addProduct.param
         })
      }
      return db.execTransaction(list);
   },

    /**
     * 批量增加数据
     * @param table 表名
     * @param moduleBean 要添加的字段 [ {字段名:字段值}]
     * 例:db.bulkCreate(tableName, [{id:'12', name:'jerry'}, {id:'115', name:'hou'}]);
     */
    bulkCreate(table, moduleBean, isConfig) {
      let attributes = new Set();
      let values = [];
      moduleBean.forEach(ele => {
        let value = [];
        for (var key in ele) {
          attributes.add(key);
          value.push(ele[key]);
        }
        values.push(value);
      });
      var _sql = `INSERT INTO ${table}(${Array.from(attributes).join(',')}) VALUES ? `;
      if (isConfig) {
        return {
          sql: _sql,
          param: [values]
        }
      } else {
        return this.execSql(_sql, [values]);
      }

    },
   /**
     *  自定义 SQL 语句
     * 【注】表名一定要用??两个问号
     */
    execSql(sql, values, field = false) {
      return new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
          if (err) {
            connection && connection.release();
            reject(err);
          } else {
            var query = connection.query(sql, values, (err, rows, fields) => {
              connection.release();
              if (err) {
                reject(err);
                process.logger.error("SQL Error:[", err, "]");
              } else {
                if (field) {
                  resolve({
                    data: rows,
                    fields: fields
                  });
                } else {
                  resolve(rows);
                }
              }
            });
            process.logger.trace("Current Exec SQL:[", query.sql, "]");
          }
        });
      });
    },
  /**
    * 开启事务处理
    * @param sqlParamList sql语句和参数对象数组
    例:
    db.execTransaction([{
      sql: "INSERT INTO ?? SET?",
      param : [table, entity],
      callback: function(result){
      //执行成功回调
      console.log(result);
    }
    },{
      sql: "INSERT INTO ?? SET email=?",
      param : [table, 'lixia@goinni.com'],
      callback: function(result){
      console.log(result);
      }
    },{
      sql: "INSERT INTO ?? SET email=?",
      param : [table, 'limeizhen@goinni.com']
    }]);
    */
    execTransaction(sqlParamList) {

      return new Promise((resolve, reject) => {

        pool.getConnection(function (err, connection) {
          if (err) {
            resolve(err);
          } else {
            connection.beginTransaction(function (err) {

              if (err) {
                reject(err);
                connection.release();
                //throw err;
              }
              var n = 0,
                res = [];
              // 递归处理多条 SQL 语句
              function ac(sqlParamList) {
                var item = sqlParamList[n];
                var qr = connection.query(item.sql, item.param, function (error, results, fields) {
                  res.push(results); //缓存结果,统一返回
                  if (error) {
                    return connection.rollback(function () {
                      //throw error;
                      reject(error);
                      connection.release();
                    });
                  }
                  process.logger.trace(`Current Exec SQL:[${qr.sql}]`);
                  if (n === sqlParamList.length - 1) {
                    // 最后统一提交
                    connection.commit(function (err) {
                      if (err) {
                        return connection.rollback(function () {
                          //throw err;
                          reject(err);
                          connection.release();
                        });
                      }
                      resolve(res);
                      connection.release();
                      process.logger.info('Transaction Success!');
                    });

                  } else {
                    n++;
                    //将结果回传给当前方法,方便后续使用
                    item.callback && item.callback(results);
                    //递归
                    ac(sqlParamList);
                  }
                });
              }

              ac(sqlParamList);

            });
          }
        });
      });
    },
 

新增角色

   roleAdd(need) {
      let list = [];
      //新增就直接批量增加了
      if (Array.isArray(need.products) && need.products.length > 0) {
         let productAdd = db.bulkCreate(dcMeun, need.products, true)
         list.push({
            sql: productAdd.sql,
            param: productAdd.param
         })
      }
      return db.execTransaction(list);
   },
里面的
bulkCreate和execTransaction函数都和上面编辑的一模一样

 

posted on 2022-02-14 13:36  Tsunami黄嵩粟  阅读(148)  评论(0)    收藏  举报