eme-flow
Version:
eme flow组件
1,269 lines (1,005 loc) • 116 kB
JavaScript
/**
* 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