CallBackToOSFService.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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. JSONObject jsonObject =JSONObject.parseObject(data);
  53. String action = jsonObject.getString("action");
  54. if("SIGN_FLOW_COMPLETE".equals(action)){
  55. return SIGN_FLOW_COMPLETE(ctx,jsonObject);
  56. }
  57. return "success";
  58. }
  59. /**
  60. * 签署人打开签署文件
  61. * {
  62. * "action": "OPERATOR_READ",
  63. * "timestamp": 1763969581086,
  64. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  65. * "customBizNum": "62453221152523",
  66. * "signOrder": 1,
  67. * "readTime": "2025-11-24 15:33:01",
  68. * "operator": {
  69. * "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
  70. * "psnAccount": {
  71. * "accountMobile": "17620530018"
  72. * }
  73. * }
  74. * }
  75. * @param jsonObject
  76. * @return
  77. */
  78. public Map<String,Object> OPERATOR_READ(Context ctx,JSONObject jsonObject){
  79. Map<String,Object> map = Maps.newHashMap();
  80. map.put("state","success");
  81. return map;
  82. }
  83. /**
  84. * 签署人签名消息任务完成
  85. *
  86. * {
  87. * "action": "SIGN_MISSON_COMPLETE",
  88. * "timestamp": 1763969637171,
  89. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  90. * "customBizNum": "62453221152523",
  91. * "signOrder": 1,
  92. * "operateTime": 1763969637000,
  93. * "signResult": 4,(2 - 签署完成,4 - 拒签)
  94. * "resultDescription": "测试回调",
  95. * "operator": {
  96. * "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
  97. * "psnAccount": {
  98. * "accountMobile": "17620530018"
  99. * }
  100. * }
  101. * }
  102. * @param jsonObject
  103. * @return
  104. */
  105. public Map<String,Object> SIGN_MISSON_COMPLETE(Context ctx,JSONObject jsonObject){
  106. Map<String,Object> map = Maps.newHashMap();
  107. map.put("state","success");
  108. return map;
  109. }
  110. /**
  111. * 签署人签名流程任务完成
  112. * {
  113. * "action": "SIGN_FLOW_COMPLETE",
  114. * "timestamp": 1763969637153,
  115. * "signFlowId": "f106295489f7421b82c8c78ca1673aed",
  116. * "signFlowTitle": "测试签署",
  117. * "signFlowStatus": "7",
  118. * "statusDescription": "测试回调",
  119. * "signFlowCreateTime": 1763969482000,
  120. * "signFlowStartTime": 1763969483000,
  121. * "signFlowFinishTime": 1763969637000
  122. * }
  123. * signFlowStatus:
  124. * 2 - 已完成(所有签署方完成签署)
  125. * 3 - 已撤销(发起方撤销签署任务)
  126. * 5 - 已过期(签署截止日到期后触发)
  127. * 7 - 已拒签(签署方拒绝签署)
  128. *
  129. * @param jsonObject
  130. * @return
  131. */
  132. public Map<String,Object> SIGN_FLOW_COMPLETE(Context ctx,JSONObject jsonObject) throws BOSException, EASBizException {
  133. Map<String, Object> map = getStringObjectMap(ctx, jsonObject);
  134. this.afterComplete(ctx, jsonObject);
  135. return map;
  136. }
  137. public Map<String, Object> getStringObjectMap(Context ctx, JSONObject jsonObject) throws BOSException, EASBizException {
  138. Map<String,Object> map = Maps.newHashMap();
  139. map.put("state","success");
  140. String signFlowStatus = jsonObject.getString("signFlowStatus");
  141. String signFlowId = jsonObject.getString("signFlowId");
  142. String statusDescription = jsonObject.getString("statusDescription");
  143. EntityViewInfo view = new EntityViewInfo();
  144. FilterInfo filterInfo = new FilterInfo();
  145. filterInfo.getFilterItems().add(new FilterItemInfo("signFlowId='"+signFlowId+"'"));
  146. view.setFilter(filterInfo);
  147. SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
  148. selectorItemCollection.add(new SelectorItemInfo("*"));
  149. view.setSelector(selectorItemCollection);
  150. IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(ctx);
  151. ESignGlobalStatusOverviewCollection collection = globalStatusOverview.getESignGlobalStatusOverviewCollection(view);
  152. for( int i=0;i<collection.size();i++){
  153. try {
  154. ESignGlobalStatusOverviewInfo info = collection.get(i);
  155. info.setEsignStatus(EsignStatusEnum.getEnum(Integer.parseInt(signFlowStatus)));
  156. info.setDescription(statusDescription);
  157. SyncSignedFilesUtil.syncAttachmentsForEmpPage(ctx, info.getId().toString());
  158. }catch (Exception e){
  159. e.printStackTrace();
  160. }
  161. }
  162. SelectorItemCollection selectorUpdatePartial = new SelectorItemCollection();
  163. selectorUpdatePartial.add(new SelectorItemInfo("esignStatus"));
  164. selectorUpdatePartial.add(new SelectorItemInfo("description"));
  165. globalStatusOverview.updatePartialBatchData(collection,selectorUpdatePartial);
  166. return map;
  167. }
  168. public void afterComplete(Context ctx, JSONObject jsonObject) {
  169. }
  170. }