智能仲裁后端服务

SignAward.java 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. package com.ruoyi.wisdomarbitrate.utils;
  2. import com.google.gson.Gson;
  3. import com.google.gson.JsonArray;
  4. import com.google.gson.JsonObject;
  5. import com.ruoyi.common.core.domain.entity.EsignHttpResponse;
  6. import com.ruoyi.common.enums.EsignRequestType;
  7. import com.ruoyi.common.exception.EsignDemoException;
  8. import com.ruoyi.common.utils.EsignApplicaConfig;
  9. import com.ruoyi.common.utils.EsignHttpHelper;
  10. import com.ruoyi.wisdomarbitrate.domain.SealSignRecord;
  11. import java.util.Map;
  12. public class SignAward {
  13. private static String eSignHost= EsignApplicaConfig.EsignHost;
  14. private static String eSignAppId= EsignApplicaConfig.EsignAppId;
  15. private static String eSignAppSecret= EsignApplicaConfig.EsignAppSecret;
  16. // public static String fileId = "95d0c307d91e4985bdb8874f6f84daa5";
  17. public static String fileId = "a0c2ad21065f48ff8b872412c39d5d3a";
  18. public static void main(String[] args) throws EsignDemoException {
  19. Gson gson = new Gson();
  20. SealSignRecord sealSignRecord = new SealSignRecord();
  21. sealSignRecord.setFileid("a808f1f39a744357a2f018e4ab34c55d");
  22. sealSignRecord.setFilename("23893bfd3f2249ffa5c82850c11c482e.pdf");
  23. sealSignRecord.setSignFlowid("41e6732b48c54c63a91b2379c352212d");
  24. sealSignRecord.setPensonAccount("18209231185");
  25. sealSignRecord.setPensonName("秦桃则");
  26. sealSignRecord.setOrgnizeName("西安云美电子科技有限公司");
  27. sealSignRecord.setOrgnizeNamePsnAccount("17691338406");
  28. sealSignRecord.setOrgnizeNamepsnName("韩超勃");
  29. sealSignRecord.setPositionPagepsn("2");
  30. sealSignRecord.setPositionXpsn(279+20);
  31. sealSignRecord.setPositionYpsn(216.336-20);
  32. sealSignRecord.setPositionPageorg("2");
  33. sealSignRecord.setPositionXorg(342+30);
  34. sealSignRecord.setPositionYorg(185.136);
  35. /* 发起签署*/
  36. // EsignHttpResponse createByFile = createByFile(sealSignRecord);
  37. // JsonObject createByFileJsonObject = gson.fromJson(createByFile.getBody(), JsonObject.class);
  38. // JsonObject createByFileData = createByFileJsonObject.getAsJsonObject("data");
  39. // String signFlowId = createByFileData.get("signFlowId").getAsString();
  40. // System.err.println("流程id:"+signFlowId);
  41. /* 获取文件签名印章位置*/
  42. // EsignHttpResponse positions = getPositions(sealSignRecord);
  43. // JsonObject positionsJsonObject = gson.fromJson(positions.getBody(), JsonObject.class);
  44. // JsonObject positionsData = positionsJsonObject.getAsJsonObject("data");
  45. // JsonArray keywordPositions = positionsData.get("keywordPositions").getAsJsonArray();
  46. // System.out.println("获取文件签名印章位置:" +keywordPositions.toString());
  47. // String signFlowId = "c9955453716344f9971d308abdc13464";
  48. //获取合同文件签名链接
  49. // EsignHttpResponse signUrl = signUrl(sealSignRecord);
  50. // JsonObject signUrlJsonObject = gson.fromJson(signUrl.getBody(), JsonObject.class);
  51. // JsonObject signUrlData = signUrlJsonObject.getAsJsonObject("data");
  52. // String shortUrl = signUrlData.get("shortUrl").getAsString();
  53. // String url = signUrlData.get("url").getAsString();
  54. // System.out.println("签署短链接:" +shortUrl);
  55. // System.out.println("签署长链接:"+url);
  56. //获取合同文件用印链接
  57. // EsignHttpResponse usesealUrl = usesealUrl(sealSignRecord);
  58. // JsonObject usesealUrlJsonObject = gson.fromJson(usesealUrl.getBody(), JsonObject.class);
  59. // JsonObject usesealUrlData = usesealUrlJsonObject.getAsJsonObject("data");
  60. // String shortusesealUrl = usesealUrlData.get("shortUrl").getAsString();
  61. // String sealUrl = usesealUrlData.get("url").getAsString();
  62. // System.out.println("签署长链接:" +shortusesealUrl);
  63. // System.out.println("签署短链接:"+sealUrl);
  64. //查询签署流程详情
  65. EsignHttpResponse signFlowDetail = signFlowDetail(sealSignRecord);
  66. JsonObject signFlowDetailJsonObject = gson.fromJson(signFlowDetail.getBody(),JsonObject.class);
  67. JsonObject flowDetailData = signFlowDetailJsonObject.getAsJsonObject("data");
  68. JsonArray signersArray = flowDetailData.get("signers").getAsJsonArray();
  69. for (int i = 0; i < signersArray.size(); i++) {
  70. JsonObject signerObject = (JsonObject)signersArray.get(i);
  71. Integer psnsignStatus ;
  72. Integer orgsignStatus ;
  73. if(!(signerObject.get("psnSigner").toString()).equals("null")){
  74. JsonObject psnSignerData = signerObject.getAsJsonObject("psnSigner");
  75. if(psnSignerData!=null){
  76. psnsignStatus = signerObject.get("signStatus").getAsInt();
  77. sealSignRecord.setPsnsignStatus(psnsignStatus);
  78. }
  79. }
  80. if(!(signerObject.get("orgSigner").toString()).equals("null")){
  81. JsonObject orgSignerData = signerObject.getAsJsonObject("orgSigner");
  82. if(orgSignerData!=null){
  83. orgsignStatus = signerObject.get("signStatus").getAsInt();
  84. sealSignRecord.setOrgsignStatus(orgsignStatus);
  85. }
  86. }
  87. }
  88. System.out.println(signFlowDetailJsonObject);
  89. }
  90. /**
  91. * 查询签署流程详情
  92. * @return
  93. */
  94. public static EsignHttpResponse signFlowDetail(SealSignRecord sealSignRecord) throws EsignDemoException {
  95. String signFlowId = sealSignRecord.getSignFlowid();
  96. String apiaddr= "/v3/sign-flow/"+ signFlowId + "/detail";
  97. String jsonParm = null;
  98. //请求方法
  99. EsignRequestType requestType = EsignRequestType.GET;
  100. //生成签名鉴权方式的的header
  101. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(eSignAppId,eSignAppSecret,jsonParm,requestType.name(),apiaddr,true);
  102. //发起接口请求
  103. return EsignHttpHelper.doCommHttp(eSignHost, apiaddr,requestType , jsonParm, header,true);
  104. }
  105. /**
  106. * 发起签署
  107. * @return
  108. * @throws EsignDemoException
  109. */
  110. public static EsignHttpResponse createByFile(SealSignRecord sealSignRecord) throws EsignDemoException {
  111. String apiaddr = "/v3/sign-flow/create-by-file";
  112. String fileId = sealSignRecord.getFileid();
  113. String fileName = sealSignRecord.getFilename();
  114. String psnAccount = sealSignRecord.getPensonAccount();
  115. String psnName = sealSignRecord.getPensonName();
  116. String orgName = sealSignRecord.getOrgnizeName();
  117. String orgNamePsnAccount = sealSignRecord.getOrgnizeNamePsnAccount();
  118. String orgNamepsnName = sealSignRecord.getOrgnizeNamepsnName();
  119. String positionPagepsn = sealSignRecord.getPositionPagepsn();
  120. double positionXpsn = sealSignRecord.getPositionXpsn();
  121. double positionYpsn = sealSignRecord.getPositionYpsn();
  122. String positionPageorg = sealSignRecord.getPositionPageorg();
  123. double positionXorg = sealSignRecord.getPositionXorg();
  124. double positionYorg = sealSignRecord.getPositionYorg();
  125. String jsonParm = "{\n" +
  126. " \"docs\": [\n" +
  127. " {\n" +
  128. // " \"fileId\": \"5bd34a81e8084acaab3287c019e82fe8\",\n" +
  129. " \"fileId\": \"" + fileId + "\",\n" +
  130. // " \"fileName\": \"477470a7741b4536a200c792b6ddf966.pdf\"\n" +
  131. " \"fileName\": \"" + fileName + "\"\n" +
  132. " }\n" +
  133. " ],\n" +
  134. " \"signFlowConfig\": {\n" +
  135. " \"signFlowTitle\": \"测试合同\",\n" +
  136. " \"autoStart\": true,\n" +
  137. " \"authConfig\": {\n" +
  138. " \"willingnessAuthModes\": [\n" +
  139. " \"CODE_SMS\"\n" +
  140. " ],\n" +
  141. " \"psnAvailableAuthModes\": [\n" +
  142. " \"PSN_MOBILE3\"\n" +
  143. " ],\n" +
  144. " \"orgAvailableAuthModes\": [\n" +
  145. " \"ORG_LEGALREP\"\n" +
  146. " ]\n" +
  147. " },\n" +
  148. " \"autoFinish\": true\n" +
  149. " },\n" +
  150. " \"signers\": [\n" +
  151. " {\n" +
  152. " \"psnSignerInfo\": {\n" +
  153. // " \"psnAccount\": \"18209231185\",\n" +
  154. " \"psnAccount\": \"" + psnAccount + "\",\n" +
  155. " \"psnInfo\": {\n" +
  156. // " \"psnName\": \"秦桃则\"\n" +
  157. " \"psnName\": \"" + psnName + "\"\n" +
  158. " }\n" +
  159. " },\n" +
  160. " \"signFields\": [\n" +
  161. " {\n" +
  162. // " \"fileId\": \"5bd34a81e8084acaab3287c019e82fe8\",\n" +
  163. " \"fileId\": \"" + fileId + "\",\n" +
  164. " \"normalSignFieldConfig\": {\n" +
  165. " \"autoSign\": false,\n" +
  166. " \"freeMode\": false,\n" +
  167. " \"movableSignField\": false,\n" +
  168. " \"signFieldPosition\": {\n" +
  169. // " \"positionPage\": \"2\",\n" +
  170. " \"positionPage\": \"" + positionPagepsn + "\",\n" +
  171. // " \"positionX\": 310.0,\n" +
  172. " \"positionX\": " + positionXpsn + ",\n" +
  173. // " \"positionY\": 247.536\n" +
  174. " \"positionY\": " + positionYpsn + "\n" +
  175. " },\n" +
  176. " \"signFieldStyle\": 1\n" +
  177. " },\n" +
  178. " \"signFieldType\": 0\n" +
  179. " }\n" +
  180. " ],\n" +
  181. " \"signerType\": 0\n" +
  182. " },\n" +
  183. " {\n" +
  184. " \"orgSignerInfo\": {\n" +
  185. // " \"orgName\": \"西安云美电子科技有限公司\",\n" +
  186. " \"orgName\": \"" + orgName + "\",\n" +
  187. " \"transactorInfo\": {\n" +
  188. // " \"psnAccount\": \"17691338406\",\n" +
  189. " \"psnAccount\": \"" + orgNamePsnAccount + "\",\n" +
  190. " \"psnInfo\": {\n" +
  191. // " \"psnName\": \"韩超勃\"\n" +
  192. " \"psnName\": \"" + orgNamepsnName + "\"\n" +
  193. " }\n" +
  194. " }\n" +
  195. " },\n" +
  196. " \"signFields\": [\n" +
  197. " {\n" +
  198. // " \"fileId\": \"5bd34a81e8084acaab3287c019e82fe8\",\n" +
  199. " \"fileId\": \"" + fileId + "\",\n" +
  200. " \"normalSignFieldConfig\": {\n" +
  201. " \"autoSign\": false,\n" +
  202. " \"freeMode\": false,\n" +
  203. " \"signFieldPosition\": {\n" +
  204. // " \"positionPage\": \"2\",\n" +
  205. " \"positionPage\": \"" + positionPageorg + "\",\n" +
  206. // " \"positionX\": 340.0,\n" +
  207. " \"positionX\": " + positionXorg + ",\n" +
  208. // " \"positionY\": 340.736\n" +
  209. " \"positionY\": " + positionYorg + "\n" +
  210. " },\n" +
  211. " \"signFieldStyle\": 1\n" +
  212. " },\n" +
  213. " \"signFieldType\": 0\n" +
  214. " }\n" +
  215. " ],\n" +
  216. " \"signerType\": 1\n" +
  217. " }\n" +
  218. " ]\n" +
  219. "}";
  220. //请求方法
  221. EsignRequestType requestType = EsignRequestType.POST;
  222. //生成请求签名鉴权方式的Header
  223. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(eSignAppId, eSignAppSecret, jsonParm, requestType.name(), apiaddr, true);
  224. //发起接口请求
  225. return EsignHttpHelper.doCommHttp(eSignHost, apiaddr, requestType, jsonParm, header, true);
  226. }
  227. /**
  228. * 获取合同文件签名链接
  229. * @return
  230. * @throws EsignDemoException
  231. */
  232. public static EsignHttpResponse signUrl(SealSignRecord sealSignRecord) throws EsignDemoException {
  233. String signFlowId = sealSignRecord.getSignFlowid();
  234. String psnAccount = sealSignRecord.getPensonAccount();
  235. String apiaddr = "/v3/sign-flow/" + signFlowId + "/sign-url";
  236. String jsonParm = "{\n" +
  237. " \"operator\": {\n" +
  238. // " \"psnAccount\":\"18209231185\"\n" +
  239. " \"psnAccount\": \"" + psnAccount + "\"\n" +
  240. " }\n" +
  241. "}";
  242. //请求方法
  243. EsignRequestType requestType = EsignRequestType.POST;
  244. //生成请求签名鉴权方式的Header
  245. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(eSignAppId, eSignAppSecret, jsonParm, requestType.name(), apiaddr, true);
  246. //发起接口请求
  247. return EsignHttpHelper.doCommHttp(eSignHost, apiaddr, requestType, jsonParm, header, true);
  248. }
  249. /**
  250. * 获取合同文件用印链接
  251. * @return
  252. * @throws EsignDemoException
  253. */
  254. public static EsignHttpResponse usesealUrl(SealSignRecord sealSignRecord) throws EsignDemoException {
  255. String signFlowId = sealSignRecord.getSignFlowid();
  256. String apiaddr = "/v3/sign-flow/" + signFlowId + "/sign-url";
  257. String psnAccount = sealSignRecord.getOrgnizeNamePsnAccount();
  258. String orgName = sealSignRecord.getOrgnizeName();
  259. String jsonParm = "{\n" +
  260. // " \"needLogin\": true,\n" +
  261. " \"operator\": {\n" +
  262. // " \"psnAccount\":\"17691338406\"\n" +
  263. " \"psnAccount\": \"" + psnAccount + "\"\n" +
  264. " },\n" +
  265. " \"organization\": {\n" +
  266. // " \"orgName\": \"西安云美电子科技有限公司\"\n" +
  267. " \"orgName\": \"" + orgName + "\"\n" +
  268. " }\n" +
  269. "}";
  270. //请求方法
  271. EsignRequestType requestType = EsignRequestType.POST;
  272. //生成请求签名鉴权方式的Header
  273. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(eSignAppId, eSignAppSecret, jsonParm, requestType.name(), apiaddr, true);
  274. //发起接口请求
  275. return EsignHttpHelper.doCommHttp(eSignHost, apiaddr, requestType, jsonParm, header, true);
  276. }
  277. /**
  278. * 获取文件签名印章位置
  279. * @return
  280. * @throws EsignDemoException
  281. */
  282. public static EsignHttpResponse getPositions(SealSignRecord sealSignRecord) throws EsignDemoException {
  283. String fileId = sealSignRecord.getFileid();
  284. String apiaddr = "/v3/files/" + fileId + "/keyword-positions";
  285. String jsonParm = "{\n" +
  286. " \"keywords\": [\n" +
  287. " \"仲裁员:\",\n" +
  288. " \"(仲裁委员会盖章)\"\n" +
  289. " ]\n" +
  290. "}";
  291. //请求方法
  292. EsignRequestType requestType = EsignRequestType.POST;
  293. //生成请求签名鉴权方式的Header
  294. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(eSignAppId, eSignAppSecret, jsonParm, requestType.name(), apiaddr, true);
  295. //发起接口请求
  296. return EsignHttpHelper.doCommHttp(eSignHost, apiaddr, requestType, jsonParm, header, true);
  297. }
  298. }