CallBackToOSFService.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package com.kingdee.eas.custom.esign.osf;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.Maps;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  7. import com.kingdee.bos.metadata.entity.*;
  8. import com.kingdee.eas.common.EASBizException;
  9. import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewCollection;
  10. import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewFactory;
  11. import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewInfo;
  12. import com.kingdee.eas.custom.esign.IESignGlobalStatusOverview;
  13. import com.kingdee.eas.custom.esign.bizEnum.EsignStatusEnum;
  14. import com.kingdee.eas.custom.esign.util.SyncSignedFilesUtil;
  15. import java.util.Map;
  16. /**
  17. * https://open.esign.cn/doc/opendoc/notify3/sblzg8
  18. * 签署类通知事件
  19. *
  20. * 签署方-已读通知:OPERATOR_READ
  21. *
  22. * 签署方-签署结果通知:SIGN_MISSON_COMPLETE
  23. *
  24. * 流程结束通知:SIGN_FLOW_COMPLETE
  25. *
  26. * 签署发起成功通知:SIGN_FLOW_INITIATED
  27. *
  28. * 签署人更正个人信息回调通知:OPERATOR_CORRECT_IDENTITY
  29. *
  30. * 经办人转交签署任务通知:TRANSMISS_SIGN
  31. *
  32. * 用印审批驳回通知:SIGN_SEAL_EXAMINE_REJECTED
  33. *
  34. * 合同发起解约通知:SIGN_FILE_RESCISSION_INITIATE
  35. *
  36. * 合同解约成功通知:SIGN_FILE_RESCINDED
  37. *
  38. * 抄送方-已读通知:COPIER_READ
  39. *
  40. * 批量签署结果通知:BATCH_SIGN_FLOW_COMPLETE
  41. *
  42. *
  43. * description: CallBackToOSFService <br>
  44. * date: 24/11/2025 下午 5:11 <br>
  45. * author: lhbj <br>
  46. * version: 1.0 <br>
  47. */
  48. public class CallBackToOSFService implements IHRMsfService {
  49. @Override
  50. public Object process(Context ctx, Map map) throws EASBizException, BOSException {
  51. String data = (String) map.get("data");
  52. System.out.println(data);
  53. JSONObject jsonObject =JSONObject.parseObject(data);
  54. String action = jsonObject.getString("action");
  55. if("SIGN_FLOW_COMPLETE".equals(action)){
  56. return SIGN_FLOW_COMPLETE(ctx,jsonObject);
  57. }
  58. return "success";
  59. }
  60. /**
  61. * 签署人打开签署文件
  62. * {
  63. * "action": "OPERATOR_READ",
  64. * "timestamp": 1763969581086,
  65. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  66. * "customBizNum": "62453221152523",
  67. * "signOrder": 1,
  68. * "readTime": "2025-11-24 15:33:01",
  69. * "operator": {
  70. * "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
  71. * "psnAccount": {
  72. * "accountMobile": "17620530018"
  73. * }
  74. * }
  75. * }
  76. * @param jsonObject
  77. * @return
  78. */
  79. public Map<String,Object> OPERATOR_READ(Context ctx,JSONObject jsonObject){
  80. Map<String,Object> map = Maps.newHashMap();
  81. map.put("state","success");
  82. return map;
  83. }
  84. /**
  85. * 签署人签名消息任务完成
  86. *
  87. * {
  88. * "action": "SIGN_MISSON_COMPLETE",
  89. * "timestamp": 1763969637171,
  90. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  91. * "customBizNum": "62453221152523",
  92. * "signOrder": 1,
  93. * "operateTime": 1763969637000,
  94. * "signResult": 4,(2 - 签署完成,4 - 拒签)
  95. * "resultDescription": "测试回调",
  96. * "operator": {
  97. * "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
  98. * "psnAccount": {
  99. * "accountMobile": "17620530018"
  100. * }
  101. * }
  102. * }
  103. * @param jsonObject
  104. * @return
  105. */
  106. public Map<String,Object> SIGN_MISSON_COMPLETE(Context ctx,JSONObject jsonObject){
  107. Map<String,Object> map = Maps.newHashMap();
  108. map.put("state","success");
  109. return map;
  110. }
  111. /**
  112. * 签署人签名流程任务完成
  113. * {
  114. * "action": "SIGN_FLOW_COMPLETE",
  115. * "timestamp": 1763969637153,
  116. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  117. * "signFlowTitle": "测试签署",
  118. * "signFlowStatus": "7",
  119. * "statusDescription": "测试回调",
  120. * "signFlowCreateTime": 1763969482000,
  121. * "signFlowStartTime": 1763969483000,
  122. * "signFlowFinishTime": 1763969637000
  123. * }
  124. * signFlowStatus:
  125. * 2 - 已完成(所有签署方完成签署)
  126. * 3 - 已撤销(发起方撤销签署任务)
  127. * 5 - 已过期(签署截止日到期后触发)
  128. * 7 - 已拒签(签署方拒绝签署)
  129. *
  130. * @param jsonObject
  131. * @return
  132. */
  133. public Map<String,Object> SIGN_FLOW_COMPLETE(Context ctx,JSONObject jsonObject) throws BOSException, EASBizException {
  134. Map<String, Object> map = getStringObjectMap(ctx, jsonObject);
  135. this.afterComplete(ctx, jsonObject);
  136. return map;
  137. }
  138. public Map<String, Object> getStringObjectMap(Context ctx, JSONObject jsonObject) throws BOSException, EASBizException {
  139. Map<String,Object> map = Maps.newHashMap();
  140. map.put("state","success");
  141. String signFlowStatus = jsonObject.getString("signFlowStatus");
  142. String signFlowId = jsonObject.getString("signFlowId");
  143. String statusDescription = jsonObject.getString("statusDescription");
  144. EntityViewInfo view = new EntityViewInfo();
  145. FilterInfo filterInfo = new FilterInfo();
  146. filterInfo.getFilterItems().add(new FilterItemInfo("signFlowId='"+signFlowId+"'"));
  147. view.setFilter(filterInfo);
  148. SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
  149. selectorItemCollection.add(new SelectorItemInfo("*"));
  150. view.setSelector(selectorItemCollection);
  151. IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(ctx);
  152. ESignGlobalStatusOverviewCollection collection = globalStatusOverview.getESignGlobalStatusOverviewCollection(view);
  153. for( int i=0;i<collection.size();i++){
  154. try {
  155. ESignGlobalStatusOverviewInfo info = collection.get(i);
  156. info.setEsignStatus(EsignStatusEnum.getEnum(Integer.parseInt(signFlowStatus)));
  157. info.setDescription(statusDescription);
  158. SyncSignedFilesUtil.syncAttachmentsForEmpPage(ctx, info.getId().toString());
  159. }catch (Exception e){
  160. e.printStackTrace();
  161. }
  162. }
  163. SelectorItemCollection selectorUpdatePartial = new SelectorItemCollection();
  164. selectorUpdatePartial.add(new SelectorItemInfo("esignStatus"));
  165. selectorUpdatePartial.add(new SelectorItemInfo("description"));
  166. globalStatusOverview.updatePartialBatchData(collection,selectorUpdatePartial);
  167. return map;
  168. }
  169. public void afterComplete(Context ctx, JSONObject jsonObject) {
  170. }
  171. }