signature_controller.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. 'use strict';
  2. /**
  3. * Created by Tony on 2019/9/26.
  4. */
  5. const fs = require('fs');
  6. const sourceTypeConst = require('../const/source_type');
  7. module.exports = app => {
  8. class ReportController extends app.BaseController {
  9. /**
  10. * 创建电子签名角色
  11. *
  12. * @param {Object} ctx - egg全局context
  13. * @return {void}
  14. */
  15. async createSignatureRole(ctx) {
  16. const params = JSON.parse(ctx.request.body.params);
  17. // console.log(params);
  18. const rst = await ctx.service.signatureRole.createRole(params.name, params.bind_acc_id, params.prj_id, params.tender_id);
  19. // console.log(rst);
  20. ctx.body = { data: rst };
  21. // ctx.body = { data: { msg: 'test the network' } };
  22. ctx.status = 201;
  23. }
  24. /**
  25. * 创建签名角色关联
  26. *
  27. * @param {Object} ctx - egg全局context
  28. * @return {void}
  29. */
  30. async createRoleRel(ctx) {
  31. // 这个好像已经没有调用了
  32. const params = JSON.parse(ctx.request.body.params);
  33. const rst = await ctx.service.roleRptRel.createRoleRelationship(params.tender_id, params.rpt_id, params.sid, params.business_id, '', params.rel_content);
  34. ctx.body = { data: rst };
  35. ctx.status = 201;
  36. }
  37. /**
  38. * 更新签名角色关联
  39. *
  40. * @param {Object} ctx - egg全局context
  41. * @return {void}
  42. */
  43. async updateRoleRel(ctx) {
  44. const params = JSON.parse(ctx.request.body.params);
  45. // console.log(params);
  46. const bzId = params.business_id;
  47. const srcKey = sourceTypeConst.sourceTypeKey[params.source_type];
  48. console.log(params.rel_content);
  49. const rst = await ctx.service.roleRptRel.updateRoleRelationship(params.id, params.tender_id, params.rpt_id, params.stage_id, bzId, srcKey, params.rel_content);
  50. const roleRel = await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_id, params.stage_id, bzId);
  51. // const roleRel = params.rel_content;
  52. await encodeSignatureDataUri(roleRel, this.app.baseDir);
  53. // console.log(rst);
  54. ctx.body = { data: rst, signatureRelInfo: roleRel };
  55. // ctx.body = { data: { msg: 'test the network' } };
  56. ctx.status = 201;
  57. }
  58. /**
  59. * 获取多个标段签名角色关联
  60. *
  61. * @param {Object} ctx - egg全局context
  62. * @return {void}
  63. */
  64. async getMultiRoleRptRels(ctx) {
  65. const params = JSON.parse(ctx.request.body.params);
  66. const conParams = params.selectedTenders;
  67. const rst = await ctx.service.roleRptRel.getCrossTenderRoleRptRels(conParams);
  68. ctx.body = { data: rst };
  69. ctx.status = 201;
  70. }
  71. /**
  72. * 跨标段更新签名角色关联
  73. *
  74. * @param {Object} ctx - egg全局context
  75. * @return {void}
  76. */
  77. async updateCrossTendersRoleRelationship(ctx) {
  78. const params = JSON.parse(ctx.request.body.params);
  79. const conParams = params.selectedTenders;
  80. const roleRel = params.rel_content;
  81. const bzId = params.business_id;
  82. const srcKey = sourceTypeConst.sourceTypeKey[params.source_type];
  83. // console.log(params.rel_content);
  84. await ctx.service.roleRptRel.updateRoleRelationship(params.id, params.tender_id, params.rpt_id, params.stage_id, bzId, srcKey, params.rel_content); // 传过来的数据是额外项目的,还需要单独处理当前的
  85. const rst = await ctx.service.roleRptRel.updateMultiRoleRelationship(conParams, bzId, srcKey, roleRel);
  86. ctx.body = { data: rst };
  87. ctx.status = 201;
  88. }
  89. // 多个变更令更新签名角色关联
  90. async updateMultiChangesRoleRelationship(ctx) {
  91. const params = JSON.parse(ctx.request.body.params);
  92. const conParams = params.selectedChanges;
  93. const roleRel = params.rel_content;
  94. const bzId = params.business_id;
  95. const srcKey = sourceTypeConst.sourceTypeKey[params.source_type];
  96. console.log('before:');
  97. console.log(params.rel_content);
  98. await ctx.service.roleRptRel.updateRoleRelationship(params.id, params.tender_id, params.rpt_id, params.stage_id, bzId, srcKey, params.rel_content); // 传过来的数据是额外变更令的,还需要单独处理当前的
  99. // update完默认当前的变更令后要清理审核日期(其他变更令的审核日期肯定会有出入的)
  100. params.rel_content.forEach(role_rel => {
  101. role_rel.sign_date = null;
  102. });
  103. console.log('after:');
  104. console.log(params.rel_content);
  105. const rst = await ctx.service.roleRptRel.updateMultiChangeRoleRelationship(conParams, srcKey, roleRel);
  106. ctx.body = { data: rst };
  107. ctx.status = 201;
  108. }
  109. // 多个XX(变更方案,变更申请...)更新签名角色关联
  110. async updateMultiOtherRoleRelationship(ctx) {
  111. const params = JSON.parse(ctx.request.body.params);
  112. const conParams = params.selected;
  113. const roleRel = params.rel_content;
  114. const bzId = params.business_id;
  115. const srcKey = sourceTypeConst.sourceTypeKey[params.source_type];
  116. console.log('before:');
  117. console.log(params.rel_content);
  118. await ctx.service.roleRptRel.updateRoleRelationship(params.id, params.tender_id, params.rpt_id, params.stage_id, bzId, srcKey, params.rel_content); // 传过来的数据是额外变更令的,还需要单独处理当前的
  119. // update完默认当前的变更令后要清理审核日期(其他变更令的审核日期肯定会有出入的)
  120. params.rel_content.forEach(role_rel => {
  121. role_rel.sign_date = null;
  122. });
  123. console.log('after:');
  124. console.log(params.rel_content);
  125. const rst = await ctx.service.roleRptRel.updateMultiOtherRoleRelationship(conParams, srcKey, roleRel);
  126. ctx.body = { data: rst };
  127. ctx.status = 201;
  128. }
  129. /**
  130. * 更新最近使用签名
  131. *
  132. * @param {Object} ctx - egg全局context
  133. * @return {void}
  134. */
  135. async updateSignatureUsed(ctx) {
  136. const params = JSON.parse(ctx.request.body.params);
  137. const used_time = ctx.request.body.create_time;
  138. const signused = await ctx.service.signatureUsed.updateUsed(params, used_time);
  139. const signUsedList = await ctx.service.signatureUsed.getSignatureUsedByTenderId(params.tender_id);
  140. // const rst = await ctx.service.signatureRole.createRole(params.name, params.bind_acc_id, params.prj_id, params.tender_id);
  141. // console.log(rst);
  142. ctx.body = { data: signUsedList };
  143. // ctx.body = { data: { msg: 'test the network' } };
  144. ctx.status = 201;
  145. }
  146. }
  147. return ReportController;
  148. };
  149. function isFileExisted(file) {
  150. return new Promise(function(resolve, reject) {
  151. fs.access(file, err => {
  152. if (err) {
  153. reject(false);
  154. } else {
  155. resolve(true);
  156. }
  157. });
  158. });
  159. }
  160. async function encodeSignatureDataUri(roleRel, baseDir) {
  161. if (roleRel) {
  162. for (const singleRoleRel of roleRel) {
  163. if (singleRoleRel.rel_content !== null && singleRoleRel.rel_content !== undefined && singleRoleRel.rel_content !== '') {
  164. const roleRelContent = JSON.parse(singleRoleRel.rel_content);
  165. for (const role of roleRelContent) {
  166. // console.log(role);
  167. if (role.sign_path !== '') {
  168. const filePath = baseDir + '/app' + role.sign_path;
  169. try {
  170. const res = await isFileExisted(filePath);
  171. if (res) {
  172. const bData = fs.readFileSync(filePath);
  173. const base64Str = bData.toString('base64');
  174. const datauri = 'data:image/png;base64,' + base64Str;
  175. role.sign_pic = datauri;
  176. } else {
  177. console.log('文件不存在:' + filePath);
  178. }
  179. } catch (err) {
  180. console.error(err);
  181. }
  182. }
  183. }
  184. singleRoleRel.rel_content = JSON.stringify(roleRelContent);
  185. } else {
  186. singleRoleRel.rel_content = [];
  187. }
  188. }
  189. }
  190. }