sign_controller.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. 'use strict';
  2. /**
  3. * 签名相关控制器
  4. *
  5. * @author EllisRan
  6. * @date 2019/8/14
  7. * @version
  8. */
  9. const moment = require('moment');
  10. const path = require('path');
  11. const sendToWormhole = require('stream-wormhole');
  12. const fs = require('fs');
  13. module.exports = app => {
  14. class SignController extends app.BaseController {
  15. /**
  16. * 电子签名页面
  17. *
  18. * @param {Object} ctx - egg全局变量
  19. * @return {void}
  20. */
  21. async index(ctx) {
  22. const renderData = {
  23. error: false,
  24. };
  25. try {
  26. const userinfo = await ctx.service.projectAccount.getDataById(ctx.query.user_id);
  27. if (userinfo && userinfo.session_token && userinfo.session_token === ctx.query.app_token) {
  28. renderData.id = userinfo.id;
  29. renderData.name = userinfo.name;
  30. renderData.from = ctx.query.from ? ctx.query.from : '';
  31. // renderData.role = userinfo.role;
  32. } else {
  33. // throw '参数有误, 无法访问本页';
  34. throw 'token已更新,请重新登录并再次扫码。';
  35. }
  36. } catch (error) {
  37. console.log(error);
  38. renderData.error = true;
  39. }
  40. await ctx.render('sign/info.ejs', renderData);
  41. }
  42. /**
  43. * 保存签名
  44. *
  45. * @param {Object} ctx - egg全局变量
  46. * @return {void}
  47. */
  48. async save(ctx) {
  49. try {
  50. if (ctx.request.body && ctx.request.body.id) {
  51. const signData = await ctx.service.netcasign.getDataByCondition({ uid: ctx.request.body.id });
  52. if (!signData) {
  53. throw '当前用户不存在绑定证书';
  54. }
  55. const result = await ctx.service.netcasign.save({ sign_base64: ctx.request.body.sign_base64 }, signData.id);
  56. if (result) {
  57. ctx.body = { err: 0, msg: '' };
  58. } else {
  59. throw '添加数据库失败';
  60. }
  61. } else {
  62. const stream = await ctx.getFileStream({ requireFile: false });
  63. const create_time = Date.parse(new Date()) / 1000;
  64. const dirName = 'app/public/upload/sign/';
  65. const fileName = moment().format('YYYYMMDD') + '_sign_' + create_time + '.png';
  66. await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, dirName, fileName));
  67. await sendToWormhole(stream);
  68. const result = await ctx.service.projectAccount.update({ sign_path: fileName }, { id: stream.fields.id });
  69. if (result) {
  70. ctx.body = { err: 0, msg: '' };
  71. } else {
  72. throw '添加数据库失败';
  73. }
  74. }
  75. } catch (err) {
  76. this.log(err);
  77. ctx.body = { err: 1, msg: err.toString() };
  78. }
  79. }
  80. }
  81. return SignController;
  82. };