CallBackToOSFService.java 6.1 KB

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