UNPKG

eme-flow

Version:

eme flow组件

1,269 lines (1,005 loc) 116 kB
/** * Created by cc on 2016/9/23 0023. * 未完成 : * 当节点CONTROLLER抛出异常时,页面依然进行渲染,且渲染错误时错误信息在界面上展示时可能引起脚本错误 * 即时是窗体,发生错误跳转到error时,仍然后退,而不是关闭页面.. */ 'use strict'; exports.__esModule = true; var _typeof2 = require("babel-runtime/helpers/typeof"); var _typeof3 = _interopRequireDefault(_typeof2); var _stringify = require("babel-runtime/core-js/json/stringify"); var _stringify2 = _interopRequireDefault(_stringify); var _regenerator = require("babel-runtime/regenerator"); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator"); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _fs = require("fs"); var _fs2 = _interopRequireDefault(_fs); var _path = require("path"); var _path2 = _interopRequireDefault(_path); var _ejs = require("ejs"); var _ejs2 = _interopRequireDefault(_ejs); var _moment = require("moment"); var _moment2 = _interopRequireDefault(_moment); var _toolkit = require("./util/toolkit"); var _toolkit2 = _interopRequireDefault(_toolkit); var _FlowController = require("./util/FlowController"); var _FlowController2 = _interopRequireDefault(_FlowController); var _SQL = require("./sql/SQL"); var _SQL2 = _interopRequireDefault(_SQL); var _dao = require("./sql/dao"); var _dao2 = _interopRequireDefault(_dao); var _sql = require("./resource/sql"); var _sql2 = _interopRequireDefault(_sql); var _consts = require("./resource/consts"); var _consts2 = _interopRequireDefault(_consts); var _i18n = require("./resource/i18n"); var _i18n2 = _interopRequireDefault(_i18n); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var readDir = _toolkit2.default.P(_fs2.default.readdir); var readFile = _toolkit2.default.P(_fs2.default.readFile); var unlink = _toolkit2.default.P(_fs2.default.unlink); var writeFile = _toolkit2.default.P(_fs2.default.writeFile); var renderFile = _toolkit2.default.P(_ejs2.default.renderFile, _ejs2.default); var mkdir = _toolkit2.default.P(_fs2.default.mkdir, _fs2.default); /** * 通过文件夹id获取文件夹下的文件名称 * ps : 文件夹下只能有一个文件 * @param id */ var getFileName = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(id) { var apath, files; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: apath = _path2.default.join(process.cwd(), "/script/" + id); _context.next = 3; return _fs2.default.existsSync(apath); case 3: _context.t1 = _context.sent; _context.t0 = _context.t1 === true; if (!_context.t0) { _context.next = 9; break; } _context.next = 8; return readDir(apath); case 8: _context.t0 = _context.sent; case 9: files = _context.t0; if (!(files && files.length > 0)) { _context.next = 12; break; } return _context.abrupt("return", [_path2.default.join(apath, files[0]), files[0]]); case 12: return _context.abrupt("return", [0, 0]); case 13: case "end": return _context.stop(); } } }, _callee, this); })); return function getFileName(_x) { return _ref.apply(this, arguments); }; }(); /** * 将value保存为文件存放到id目录下,并以value的MD5命名;同时删掉旧文件 * @param id * @param value * @returns {*} */ var newFile = function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(id, oldName, value, isJs) { var apath, md5; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: apath = _path2.default.join(process.cwd(), '/script'); _context2.next = 3; return _fs2.default.existsSync(apath); case 3: _context2.t0 = _context2.sent; if (!(_context2.t0 === false)) { _context2.next = 7; break; } _context2.next = 7; return mkdir(apath); case 7: apath = _path2.default.join(apath, id); _context2.next = 10; return _fs2.default.existsSync(apath); case 10: _context2.t1 = _context2.sent; if (!(_context2.t1 === false)) { _context2.next = 14; break; } _context2.next = 14; return mkdir(apath); case 14: if (!(oldName !== 0)) { _context2.next = 22; break; } _context2.next = 17; return _fs2.default.existsSync(oldName); case 17: _context2.t2 = _context2.sent; _context2.t3 = _context2.t2 === true; if (!_context2.t3) { _context2.next = 22; break; } _context2.next = 22; return unlink(oldName); case 22: _context2.next = 24; return _toolkit2.default.md5(value); case 24: md5 = _context2.sent; apath = _path2.default.join(apath, md5 + "." + (isJs === true ? 'js' : 'ejs')); _context2.next = 28; return writeFile(apath, value, 'utf8'); case 28: return _context2.abrupt("return", apath); case 29: case "end": return _context2.stop(); } } }, _callee2, this); })); return function newFile(_x2, _x3, _x4, _x5) { return _ref2.apply(this, arguments); }; }(); exports.default = { /*初始化默认数据库*/ set: function set(options) { _dao2.default.set(options); }, /*获取流程列表*/ getFlowList: function () { var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(req) { var sql, connection, result; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: sql = new _SQL2.default().push(_sql2.default.getFlowSimplyInfo).push(_sql2.default.getFlowCount).jqGrid(req).compile(); _context3.next = 3; return _dao2.default.get(); case 3: connection = _context3.sent; _context3.next = 6; return _toolkit2.default.P(connection.query, connection)(sql); case 6: result = _context3.sent; connection.release(); return _context3.abrupt("return", { total: result[1][0].t, records: parseInt((result[1][0].t + (req.param('rows') - 0 + 1)) / req.param('rows')), rows: result[0] }); case 9: case "end": return _context3.stop(); } } }, _callee3, this); })); function getFlowList(_x6) { return _ref3.apply(this, arguments); } return getFlowList; }(), /** * 获取流程实例 * @param id */ getFlowInstance: function () { var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(id, req) { var sql, connection, result; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: sql = new _SQL2.default().push(_sql2.default.getInstanceSimplyInfo).push(_sql2.default.getInstanceCount).jqGrid(req).and('flow_id = :flow_id').set('flow_id', id).compile(); _context4.next = 3; return _dao2.default.get(); case 3: connection = _context4.sent; _context4.next = 6; return _toolkit2.default.P(connection.query, connection)(sql); case 6: result = _context4.sent; connection.release(); return _context4.abrupt("return", { total: result[1][0].t, records: req ? parseInt((result[1][0].t + (req.param('rows') - 0 + 1)) / req.param('rows')) : 0, rows: result[0] }); case 9: case "end": return _context4.stop(); } } }, _callee4, this); })); function getFlowInstance(_x7, _x8) { return _ref4.apply(this, arguments); } return getFlowInstance; }(), /** * 删除流程实例 * @param id */ delFlowInstance: function () { var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(id) { var sql, connection; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: sql = new _SQL2.default().push(_sql2.default.delInstanceByFlowid).set('flow_id', id).compile(); _context5.next = 3; return _dao2.default.get(); case 3: connection = _context5.sent; _context5.next = 6; return _toolkit2.default.P(connection.beginTransaction, connection); case 6: _context5.prev = 6; _context5.next = 9; return _toolkit2.default.P(connection.query, connection)(sql); case 9: _context5.next = 11; return _toolkit2.default.P(connection.commit, connection)(); case 11: _context5.next = 19; break; case 13: _context5.prev = 13; _context5.t0 = _context5["catch"](6); _context5.next = 17; return _toolkit2.default.P(connection.rollback, connection)(); case 17: sails.log.error((0, _stringify2.default)(_context5.t0)); throw _toolkit2.default.error(211011); case 19: _context5.prev = 19; connection.release(); return _context5.finish(19); case 22: return _context5.abrupt("return", 0); case 23: case "end": return _context5.stop(); } } }, _callee5, this, [[6, 13, 19, 22]]); })); function delFlowInstance(_x9) { return _ref5.apply(this, arguments); } return delFlowInstance; }(), /** * 删除流程 * @param id */ delFlow: function () { var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(id) { var sql, connection; return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: sql = new _SQL2.default().push(_sql2.default.deleteFlow).set('flow_id', id).compile(); _context6.next = 3; return _dao2.default.get(); case 3: connection = _context6.sent; _context6.next = 6; return _toolkit2.default.P(connection.beginTransaction, connection); case 6: _context6.prev = 6; _context6.next = 9; return _toolkit2.default.P(connection.query, connection)(sql); case 9: _context6.next = 11; return _toolkit2.default.P(connection.commit, connection)(); case 11: _context6.next = 19; break; case 13: _context6.prev = 13; _context6.t0 = _context6["catch"](6); _context6.next = 17; return _toolkit2.default.P(connection.rollback, connection)(); case 17: sails.log.error((0, _stringify2.default)(_context6.t0)); throw _toolkit2.default.error(211011); case 19: _context6.prev = 19; connection.release(); return _context6.finish(19); case 22: return _context6.abrupt("return", 0); case 23: case "end": return _context6.stop(); } } }, _callee6, this, [[6, 13, 19, 22]]); })); function delFlow(_x10) { return _ref6.apply(this, arguments); } return delFlow; }(), /** * 获取流程for配置 * @param req flow_id */ getFlowConfig: function () { var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(flow_id) { var sql, connection, flow; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: sql = new _SQL2.default().push(_sql2.default.getFlow).and('flow_id = :flow_id').set('flow_id', flow_id).compile(); _context7.next = 3; return _dao2.default.get(); case 3: connection = _context7.sent; _context7.next = 6; return _toolkit2.default.P(connection.query, connection)(sql); case 6: flow = _context7.sent; connection.release(); if (!(flow.length > 0)) { _context7.next = 10; break; } return _context7.abrupt("return", flow[0]); case 10: case "end": return _context7.stop(); } } }, _callee7, this); })); function getFlowConfig(_x11) { return _ref7.apply(this, arguments); } return getFlowConfig; }(), /** * 根据编码获取流程 * @param flow_code * @returns {*} */ getFlowByCode: function () { var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(flow_code) { var sql, connection, flow; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: sql = new _SQL2.default().push(_sql2.default.getFlowSimplyInfo).and('flow_code = :flow_code').set('flow_code', flow_code).compile(); _context8.next = 3; return _dao2.default.get(); case 3: connection = _context8.sent; _context8.next = 6; return _toolkit2.default.P(connection.query, connection)(sql); case 6: flow = _context8.sent; connection.release(); return _context8.abrupt("return", flow); case 9: case "end": return _context8.stop(); } } }, _callee8, this); })); function getFlowByCode(_x12) { return _ref8.apply(this, arguments); } return getFlowByCode; }(), /** * 设置流程有效或者无效 * 同一个编码的只能有一个有效 * @param flow_code * @returns {*} */ updateFlowVliad: function () { var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(flow_id, flow_valid) { var connection, query, sql, flow; return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: _context9.next = 2; return _dao2.default.get(); case 2: connection = _context9.sent; query = _toolkit2.default.P(connection.query, connection); _context9.next = 6; return _toolkit2.default.P(connection.beginTransaction, connection); case 6: _context9.prev = 6; sql = new _SQL2.default(); if (!(flow_valid == _consts2.default.FLOW_VALID_YES)) { _context9.next = 19; break; } sql.push(_sql2.default.getFlowSimplyInfo).and('flow_id = :flow_id').set('flow_id', flow_id); _context9.next = 12; return query(sql.compile()); case 12: flow = _context9.sent; if (!(flow.length === 0)) { _context9.next = 15; break; } throw _toolkit2.default.error(211007); case 15: flow = flow[0]; sql.clear().push(_sql2.default.updateFlowState).and('flow_code = :flow_code').set('flow_code', flow.flow_code).set('flow_valid', _consts2.default.FLOW_VALID_NO); _context9.next = 19; return query(sql.compile()); case 19: sql.clear().push(_sql2.default.updateFlowState).and('flow_id = :flow_id').set('flow_id', flow_id).set('flow_valid', flow_valid); _context9.next = 22; return query(sql.compile()); case 22: _context9.next = 24; return _toolkit2.default.P(connection.commit, connection)(); case 24: _context9.next = 32; break; case 26: _context9.prev = 26; _context9.t0 = _context9["catch"](6); sails.log.error((0, _stringify2.default)(_context9.t0)); _context9.next = 31; return _toolkit2.default.P(connection.rollback, connection)(); case 31: throw _context9.t0; case 32: _context9.prev = 32; connection.release(); return _context9.finish(32); case 35: case "end": return _context9.stop(); } } }, _callee9, this, [[6, 26, 32, 35]]); })); function updateFlowVliad(_x13, _x14) { return _ref9.apply(this, arguments); } return updateFlowVliad; }(), /** * 查找最大版本号 * @param flow_code * @returns {*} */ getMaxVersionByCode: function () { var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(flow_code) { var sql, connection, version; return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: sql = new _SQL2.default().push(_sql2.default.getMaxVersionByCode).set('flow_code', flow_code).compile(); _context10.next = 3; return _dao2.default.get(); case 3: connection = _context10.sent; _context10.next = 6; return _toolkit2.default.P(connection.query, connection)(sql); case 6: version = _context10.sent; connection.release(); return _context10.abrupt("return", version.length > 0 ? version[0].t : '1.0'); case 9: case "end": return _context10.stop(); } } }, _callee10, this); })); function getMaxVersionByCode(_x15) { return _ref10.apply(this, arguments); } return getMaxVersionByCode; }(), /** * 插入流程, 配置用 * @param req flow、node、action */ saveFlow: function () { var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(data, mode) { var flow, flowByCode, instance, node, action, i, _i, connection, query, sql, _i2, script, _i3, _script; return _regenerator2.default.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: flow = data.flow; //数据检测 _context11.next = 3; return this.getFlowByCode(flow.flow_code); case 3: flowByCode = _context11.sent; flowByCode.forEach(function (v) { if (v.flow_code === flow.flow_code && v.flow_version === flow.flow_version && v.flow_id !== flow.flow_id) { throw '数据重复,请修改版本号'; } }); _context11.next = 7; return this.getFlowInstance(flow.flow_id); case 7: instance = _context11.sent; if (!(instance.length > 0 && mode !== 'simply')) { _context11.next = 10; break; } throw '存在实例,无法编辑'; case 10: node = []; action = []; for (i in data.nodes) { node.push(data.nodes[i].flow); } for (_i in data.lines) { data.lines[_i].flow && action.push(data.lines[_i].flow); } flow.flow_struct = (0, _stringify2.default)(data); _context11.next = 17; return _dao2.default.get(); case 17: connection = _context11.sent; query = _toolkit2.default.P(connection.query, connection); _context11.next = 21; return _toolkit2.default.P(connection.beginTransaction, connection); case 21: _context11.prev = 21; sql = new _SQL2.default().push(_sql2.default.deleteFlow).set('flow_id', flow.flow_id); _context11.next = 25; return query(sql.compile()); case 25: if (!(flow.flow_valid === _consts2.default.FLOW_VALID_YES)) { _context11.next = 29; break; } //其他版本改为无效 sql.clear().push(_sql2.default.updateFlowState).and('flow_code = :flow_code').set('flow_code', flow.flow_code).set('flow_valid', _consts2.default.FLOW_VALID_NO); _context11.next = 29; return query(sql.compile()); case 29: sql.clear().push(_sql2.default.insertNode); _i2 = 0; case 31: if (!(_i2 < node.length)) { _context11.next = 90; break; } //page script = []; //库 script.push(flow.flow_page_ware || ''); if (node[_i2].node_page_override) { script.push(node[_i2].node_page_override); } else { script.push(flow.flow_page); if (node[_i2].node_page_append) { script.push(node[_i2].node_page_append); } } node[_i2].page = script.join('\n'); _context11.next = 38; return _toolkit2.default.md5(node[_i2].page); case 38: node[_i2].page_md5 = _context11.sent; //controller script.length = 0; script.push("'use strict';"); script.push(flow.flow_controller_ware || ''); script.push('module.exports = function(req , res , Flow , next){'); if (node[_i2].node_controller_override) { script.push(node[_i2].node_controller_override); } else { script.push(flow.flow_controller); if (node[_i2].node_controller_append) { script.push(node[_i2].node_controller_append); } } script.push('};'); node[_i2].controller = script.join('\n'); _context11.next = 48; return _toolkit2.default.md5(node[_i2].controller); case 48: node[_i2].controller_md5 = _context11.sent; //controller-save script.length = 0; script.push("'use strict';"); script.push(flow.flow_controller_ware || ''); script.push('module.exports = function(req , res , Flow , next){'); if (node[_i2].node_controller_save) { script.push(node[_i2].node_controller_save || 'next();'); } script.push('};'); node[_i2].controller_save = script.join('\n'); _context11.next = 58; return _toolkit2.default.md5(node[_i2].controller_save); case 58: node[_i2].controller_save_md5 = _context11.sent; //page-save script.length = 0; script.push('function(next){'); if (node[_i2].node_page_save) { script.push(node[_i2].node_page_save || 'next();'); } script.push('};'); node[_i2].page_save = script.join('\n'); _context11.next = 66; return _toolkit2.default.md5(node[_i2].page_save); case 66: node[_i2].page_save_md5 = _context11.sent; //controller-del script.length = 0; script.push("'use strict';"); script.push(flow.flow_controller_ware || ''); script.push('module.exports = function(req , res , Flow , next){'); if (node[_i2].node_controller_save) { script.push(node[_i2].node_controller_del || ''); } script.push('};'); node[_i2].controller_del = script.join('\n'); _context11.next = 76; return _toolkit2.default.md5(node[_i2].controller_del); case 76: node[_i2].controller_del_md5 = _context11.sent; //删掉没用的字段 delete node[_i2].node_page_append; delete node[_i2].node_page_override; delete node[_i2].node_controller_append; delete node[_i2].node_controller_override; delete node[_i2].node_controller_save; delete node[_i2].node_page_save; delete node[_i2].node_controller_del; sql.set('node', node[_i2]); _context11.next = 87; return query(sql.compile()); case 87: _i2++; _context11.next = 31; break; case 90: sql.clear().push(_sql2.default.insertAction); _i3 = 0; case 92: if (!(_i3 < action.length)) { _context11.next = 119; break; } //page _script = []; _script.push('function(next,comment){'); _script.push(action[_i3].action_script || 'next();'); _script.push('};'); action[_i3].page = _script.join('\n'); _context11.next = 100; return _toolkit2.default.md5(action[_i3].page); case 100: action[_i3].page_md5 = _context11.sent; //controller _script.length = 0; _script.push("'use strict';"); _script.push(flow.flow_controller_ware || ''); _script.push('module.exports = function(req , res , Flow , next){'); _script.push(action[_i3].action_controller); _script.push('};'); action[_i3].controller = _script.join('\n'); _context11.next = 110; return _toolkit2.default.md5(action[_i3].controller); case 110: action[_i3].controller_md5 = _context11.sent; delete action[_i3].action_controller; delete action[_i3].action_script; sql.set('action', action[_i3]); _context11.next = 116; return query(sql.compile()); case 116: _i3++; _context11.next = 92; break; case 119: //删掉没用的字段 delete flow.flow_page; delete flow.flow_controller; delete flow.flow_code_ware; delete flow.flow_page_ware; sql.clear().push(_sql2.default.insertFlow).set('flow_id', flow.flow_id).set('flow', flow); _context11.next = 126; return query(sql.compile()); case 126: _context11.next = 128; return _toolkit2.default.P(connection.commit, connection)(); case 128: _context11.next = 136; break; case 130: _context11.prev = 130; _context11.t0 = _context11["catch"](21); sails.log.error((0, _stringify2.default)(_context11.t0)); _context11.next = 135; return _toolkit2.default.P(connection.rollback, connection)(); case 135: throw _context11.t0; case 136: _context11.prev = 136; connection.release(); return _context11.finish(136); case 139: case "end": return _context11.stop(); } } }, _callee11, this, [[21, 130, 136, 139]]); })); function saveFlow(_x16, _x17) { return _ref11.apply(this, arguments); } return saveFlow; }(), /** * 展示流程实例页面, * req.param 需要提供biz_id和instance_id和flow_code和flow_id选择一种方式 * from_page :在流程处理界面删除流程后跳转的地址 * @param req * @param res * @returns {*} */ showFlow: function () { var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12(req, res) { var instance_id, biz_id, flow_code, flow_id, from_page, user, data, sql, connection, query, i, action, actionMD5, page, _action, _actionMD, _page, controllerMD5, controller, pageMD5, _page2, records, Flow, reqs, session, _page3; return _regenerator2.default.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: if (!(req.session.user === undefined)) { _context12.next = 2; break; } throw _toolkit2.default.error(211002); case 2: instance_id = req.param('instance_id'); biz_id = req.param('biz_id'); flow_code = req.param('flow_code'); flow_id = req.param('flow_id'); from_page = req.param('from_page'); user = req.session.user; data = { instance: 0, current_node: 0, last_record: 0, actions: 0, flow: 0 }; sql = new _SQL2.default(); _context12.next = 12; return _dao2.default.get(); case 12: connection = _context12.sent; query = _toolkit2.default.P(connection.query, connection); /*根据流程实例id加载*/ if (!(instance_id !== undefined || biz_id !== undefined)) { _context12.next = 48; break; } sql.clear().push(_sql2.default.getInstanceSimplyInfo).or('instance_id = :instance_id').or('biz_id = :biz_id').set('instance_id', instance_id).set('biz_id', biz_id); /*流程实例信息*/ _context12.next = 18; return query(sql.compile()); case 18: data.instance = _context12.sent; if (!(data.instance.length !== 1)) { _context12.next = 21; break; } throw _toolkit2.default.error(211001); case 21: data.instance = data.instance[0]; /*流程信息*/ sql.clear().push(_sql2.default.getFlowSimplyInfo).and('flow_id = :flow_id').set('flow_id', data.instance.flow_id); _context12.next = 25; return query(sql.compile()); case 25: data.flow = _context12.sent; if (!(data.flow.length === 0)) { _context12.next = 29; break; } connection.release(); throw _toolkit2.default.error(211007); case 29: data.flow = data.flow[0]; /*当前节点信息*/ sql.clear().push(_sql2.default.getNodeSimplyInfo).and('node_id = :current_node_id').set('current_node_id', data.instance.current_node_id); _context12.next = 33; return query(sql.compile()); case 33: data.current_node = _context12.sent; if (!(data.current_node.length === 0)) { _context12.next = 37; break; } connection.release(); throw _toolkit2.default.error(211006); case 37: data.current_node = data.current_node[0]; /*最新一步操作信息*/ sql.clear().push(_sql2.default.getRecord).and('action_record_id = :action_record_id').set('action_record_id', data.instance.last_record_id); _context12.next = 41; return query(sql.compile()); case 41: data.last_record = _context12.sent; if (!(data.last_record.length === 0)) { _context12.next = 45; break; } connection.release(); throw _toolkit2.default.error(211008); case 45: data.last_record = data.last_record[0]; _context12.next = 73; break; case 48: if (!(flow_id !== undefined || flow_code !== undefined)) { _context12.next = 73; break; } /* 流程信息 */ sql.clear(); if (flow_id !== undefined) { sql.push(_sql2.default.getFlowSimplyInfo).and('flow_id = :flow_id').set('flow_id', flow_id); } else { sql.push(_sql2.default.getFlowSimplyInfo).and('flow_code = :flow_code').and('flow_valid = :flow_valid').set({ flow_code: flow_code, flow_valid: _consts2.default.FLOW_VALID_YES }); } _context12.next = 53; return query(sql.compile()); case 53: data.flow = _context12.sent; if (!(data.flow.length !== 1)) { _context12.next = 57; break; } connection.release(); throw _toolkit2.default.error(211007); case 57: data.flow = data.flow[0]; /*流程验证*/ /*是否有效*/ if (!(data.flow.flow_valid === _consts2.default.FLOW_VALID_NO)) { _context12.next = 61; break; } connection.release(); throw _toolkit2.default.error(211004); case 61: /*开始节点信息*/ sql.clear().push(_sql2.default.getNodeSimplyInfo).and('flow_id = :flow_id').and('node_type = :node_type').set('flow_id', data.flow.flow_id).set('node_type', _consts2.default.NODE_TYPE_START); _context12.next = 64; return query(sql.compile()); case 64: data.current_node = _context12.sent; if (!(data.current_node.length === 0)) { _context12.next = 68; break; } connection.release(); throw _toolkit2.default.error(211006); case 68: data.current_node = data.current_node[0]; /*权限验证*/ /*开始节点指定操作人、开始节点指定操作人与当前登陆人不一样时 权限不足*/ if (!(data.current_node.node_userid && data.current_node.node_userid !== user.userid)) { _context12.next = 72; break; } connection.release(); throw _toolkit2.default.error(211003); case 72: /*流程实例信息*/ data.instance = { instance_id: _toolkit2.default.guid(2), current_node_id: data.current_node.node_id, flow_id: data.flow.flow_id, createorid: user.userid, createor: _toolkit2.default.username(user), create_time: (0, _moment2.default)().format('YYYY/MM/DD HH:mm:ss'), instance_state: 0, last_record_id: 0 }; case 73: if (!(data.flow === 0)) { _context12.next = 76; break; } connection.release(); throw _toolkit2.default.error(211001); case 76: if (!(data.current_node.node_userid === user.userid || !data.current_node.node_userid)) { _context12.next = 129; break; } if (!(data.instance.instance_state !== _consts2.default.INSTANCE_STATE_DISCARD)) { _context12.next = 128; break; } //流程非废弃时,可进行常规操作 sql.clear().push(_sql2.default.getActionSimplyInfo).and('from_node_id = :current_node_id').set('current_node_id', data.current_node.node_id).order('action_order'); _context12.next = 81; return query(sql.compile()); case 81: data.actions = _context12.sent; i = 0; case 83: if (!(i < data.actions.length)) { _context12.next = 104; break; } action = data.actions[i]; _context12.next = 87; return getFileName(action.action_id + "AS"); case 87: actionMD5 = _context12.sent; if (!(actionMD5[1] !== action.page_md5 + ".ejs")) { _context12.next = 98; break; } //需更新文件 //查询操作页面脚本 sql.clear().push(_sql2.default.getActionPage).and('action_id = :action_id').set('action_id', action.action_id); _context12.next = 92; return query(sql.compile()); case 92: page = _context12.sent; _context12.next = 95; return newFile(action.action_id + "AS", actionMD5[0], page[0].page, false); case 95: action.script = page[0].page; _context12.next = 101; break; case 98: _context12.next = 100; return readFile(actionMD5[0], 'utf8'); case 100: action.script = _context12.sent; case 101: i++; _context12.next = 83; break; case 104: /*当前节点是否允许回退*/ if (data.last_record !== 0 //有上一步 && data.current_node.node_allow_goba