فهرست منبع

修复多页签署超时问题

laiguoran 3 سال پیش
والد
کامیت
532f984946

+ 5 - 5
app/controller/profile_controller.js

@@ -289,7 +289,7 @@ module.exports = app => {
                 let signData;
                 switch (data.type) {
                     case 'bind':
-                        signData = await ctx.service.netcasign.getDataByCondition({ keyId: data.updateData.keyId });
+                        signData = await ctx.service.netcasign.getDataByCondition({ pid: ctx.session.sessionProject.id, keyId: data.updateData.keyId });
                         if (signData) {
                             const accountData = await ctx.service.projectAccount.getDataByCondition({ id: signData.uid });
                             throw '该Ukey已绑定于 ' + accountData.name + ', 不可重复绑定';
@@ -302,21 +302,21 @@ module.exports = app => {
                         response.data = await ctx.service.netcasign.getDataByCondition({ uid: sessionUser.accountId });
                         break;
                     case 'unbind':
-                        signData = await ctx.service.netcasign.getDataByCondition({ uid: sessionUser.accountId });
+                        signData = await ctx.service.netcasign.getDataByCondition({ pid: ctx.session.sessionProject.id, uid: sessionUser.accountId });
                         if (!signData) {
                             throw '当前用户不存在绑定证书,解除绑定失败';
                         }
-                        await ctx.service.netcasign.del(sessionUser.accountId);
+                        await ctx.service.netcasign.del(signData.id);
                         break;
                     case 'savesign':
-                        signData = await ctx.service.netcasign.getDataByCondition({ uid: sessionUser.accountId });
+                        signData = await ctx.service.netcasign.getDataByCondition({ pid: ctx.session.sessionProject.id, uid: sessionUser.accountId });
                         if (!signData) {
                             throw '当前用户不存在绑定证书';
                         }
                         await ctx.service.netcasign.save({ sign_base64: data.sign_base64 }, signData.id);
                         break;
                     case 'delsign':
-                        signData = await ctx.service.netcasign.getDataByCondition({ uid: sessionUser.accountId });
+                        signData = await ctx.service.netcasign.getDataByCondition({ pid: ctx.session.sessionProject.id, uid: sessionUser.accountId });
                         if (!signData) {
                             throw '当前用户不存在绑定证书';
                         }

+ 40 - 5
app/controller/report_archive_controller.js

@@ -498,12 +498,14 @@ module.exports = app => {
                         const postData2 = {
                             requestJson: JSON.stringify(data.requestJson),
                         };
-                        const result2 = await ctx.helper.sendMoreRequest(netcaSignApi + '/assemblyPdf', postData2, 'POST');
-                        console.log(result2);
+
+                        const result3 = await this.roundNetcaSign(ctx, postData2);
+                        // const result2 = await ctx.helper.sendMoreRequest(netcaSignApi + '/assemblyPdf', postData2, 'POST');
                         // 上传到oss
-                        if (result2.code === 0) {
-                            const result3 = await ctx.helper.sendMoreRequest(netcaSignApi + result2.data);
-                            const oss_reuslt = await ctx.oss.put('archive/sign/' + data.requestJson.fileName + '.PDF', result3);
+                        // console.log(result3);
+                        if (result3.code === 0) {
+                            // const result3 = await ctx.helper.sendMoreRequest(netcaSignApi + result2.data);
+                            const oss_reuslt = await ctx.oss.put('archive/sign/' + data.requestJson.fileName + '.PDF', result3.data);
                             if (oss_reuslt && oss_reuslt.res && oss_reuslt.res.status === 200) {
                                 if (data.end) {
                                     const versionId = oss_reuslt.res.headers['x-oss-version-id'];
@@ -517,6 +519,8 @@ module.exports = app => {
                             } else {
                                 throw '上传文件失败';
                             }
+                        } else {
+                            throw result3.msg;
                         }
                         break;
                     // 移除签名和已签移除pdf
@@ -544,6 +548,37 @@ module.exports = app => {
 
             ctx.body = response;
         }
+
+        async roundNetcaSign(ctx, postData2, round = 3) {
+            let response = {
+                code: 0,
+                data: '',
+            };
+            // 无法获取到result3,因为result2生成的pdf已损坏,请重复获取result2,直到获取成功或尝试3次失败后报错为止
+            try {
+                const netcaSignApi = signConst.path.api;
+                const result2 = await ctx.helper.sendMoreRequest(netcaSignApi + '/assemblyPdf', postData2, 'POST');
+                if (result2.code === 0) {
+                    const result3 = await ctx.curl(netcaSignApi + result2.data, {
+                        timeout: 30000,
+                    });
+                    if (result3) {
+                        response.data = result3.data;
+                    } else {
+                        if (round > 0) {
+                            round = round - 1;
+                            response = await this.roundNetcaSign(ctx, postData2, round);
+                        } else {
+                            throw 'pdf获取失败,网证通接口无法生成pdf';
+                        }
+                    }
+                }
+            } catch (error) {
+                response.code = 1;
+                response.msg = error;
+            }
+            return response;
+        }
     }
     return ReportArchiveController;
 };

+ 1 - 1
app/extend/helper.js

@@ -279,7 +279,7 @@ module.exports = {
                 data,
                 dataType,
             }) : await this.ctx.curl(url);
-            console.log(response);
+            // console.log(response);
             if (response.status !== 200) {
                 if (count > 0) {
                     count = count - 1;

+ 3 - 2
app/service/netcasign.js

@@ -25,6 +25,7 @@ module.exports = app => {
 
         async add(data, uid) {
             const insertData = {
+                pid: this.ctx.session.sessionProject.id,
                 uid,
                 name: data.name,
                 keyId: data.keyId,
@@ -34,8 +35,8 @@ module.exports = app => {
             return operate.affectedRows > 0;
         }
 
-        async del(uid) {
-            return await this.db.delete(this.tableName, { uid });
+        async del(id) {
+            return await this.db.delete(this.tableName, { id });
         }
 
         /**

+ 0 - 1
app/view/change/information.ejs

@@ -437,7 +437,6 @@
         charge: '<%- change.charge %>',
         w_code: JSON.parse(unescape('<%- escape(JSON.stringify(change.w_code ? change.w_code : '')) %>')),
     };
-    console.log(back_changeInfo);
     let changeInfo = Object.assign({}, back_changeInfo);
     let changeUsedData = JSON.parse(unescape('<%- escape(JSON.stringify(changeUsedData)) %>'));
 </script>