package com.kingdee.eas.custom.esign.osf;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.Context;
import com.kingdee.bos.bsf.service.app.IHRMsfService;
import com.kingdee.bos.metadata.entity.*;
import com.kingdee.eas.common.EASBizException;
import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewCollection;
import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewFactory;
import com.kingdee.eas.custom.esign.ESignGlobalStatusOverviewInfo;
import com.kingdee.eas.custom.esign.IESignGlobalStatusOverview;
import com.kingdee.eas.custom.esign.bizEnum.EsignStatusEnum;
import java.util.Map;
/**
* https://open.esign.cn/doc/opendoc/notify3/sblzg8
* 签署类通知事件
*
* 签署方-已读通知:OPERATOR_READ
*
* 签署方-签署结果通知:SIGN_MISSON_COMPLETE
*
* 流程结束通知:SIGN_FLOW_COMPLETE
*
* 签署发起成功通知:SIGN_FLOW_INITIATED
*
* 签署人更正个人信息回调通知:OPERATOR_CORRECT_IDENTITY
*
* 经办人转交签署任务通知:TRANSMISS_SIGN
*
* 用印审批驳回通知:SIGN_SEAL_EXAMINE_REJECTED
*
* 合同发起解约通知:SIGN_FILE_RESCISSION_INITIATE
*
* 合同解约成功通知:SIGN_FILE_RESCINDED
*
* 抄送方-已读通知:COPIER_READ
*
* 批量签署结果通知:BATCH_SIGN_FLOW_COMPLETE
*
*
* description: CallBackToOSFService
* date: 24/11/2025 下午 5:11
* author: lhbj
* version: 1.0
*/
public class CallBackToOSFService implements IHRMsfService {
@Override
public Object process(Context ctx, Map map) throws EASBizException, BOSException {
String data = (String) map.get("data");
JSONObject jsonObject =JSONObject.parseObject(data);
String action = jsonObject.getString("action");
if("SIGN_FLOW_COMPLETE".equals(action)){
return SIGN_FLOW_COMPLETE(ctx,jsonObject);
}
return "success";
}
/**
* 签署人打开签署文件
* {
* "action": "OPERATOR_READ",
* "timestamp": 1763969581086,
* "signFlowId": "f106295489f7421b82c8c78ca1673aed",
* "customBizNum": "62453221152523",
* "signOrder": 1,
* "readTime": "2025-11-24 15:33:01",
* "operator": {
* "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
* "psnAccount": {
* "accountMobile": "17620530018"
* }
* }
* }
* @param jsonObject
* @return
*/
public Map OPERATOR_READ(Context ctx,JSONObject jsonObject){
Map map = Maps.newHashMap();
map.put("state","success");
return map;
}
/**
* 签署人签名消息任务完成
*
* {
* "action": "SIGN_MISSON_COMPLETE",
* "timestamp": 1763969637171,
* "signFlowId": "f106295489f7421b82c8c78ca1673aed",
* "customBizNum": "62453221152523",
* "signOrder": 1,
* "operateTime": 1763969637000,
* "signResult": 4,(2 - 签署完成,4 - 拒签)
* "resultDescription": "测试回调",
* "operator": {
* "psnId": "8f69856a21584a04b4b7be84ca49ed0c",
* "psnAccount": {
* "accountMobile": "17620530018"
* }
* }
* }
* @param jsonObject
* @return
*/
public Map SIGN_MISSON_COMPLETE(Context ctx,JSONObject jsonObject){
Map map = Maps.newHashMap();
map.put("state","success");
return map;
}
/**
* 签署人签名流程任务完成
* {
* "action": "SIGN_FLOW_COMPLETE",
* "timestamp": 1763969637153,
* "signFlowId": "f106295489f7421b82c8c78ca1673aed",
* "signFlowTitle": "测试签署",
* "signFlowStatus": "7",
* "statusDescription": "测试回调",
* "signFlowCreateTime": 1763969482000,
* "signFlowStartTime": 1763969483000,
* "signFlowFinishTime": 1763969637000
* }
* signFlowStatus:
* 2 - 已完成(所有签署方完成签署)
* 3 - 已撤销(发起方撤销签署任务)
* 5 - 已过期(签署截止日到期后触发)
* 7 - 已拒签(签署方拒绝签署)
*
* @param jsonObject
* @return
*/
public Map SIGN_FLOW_COMPLETE(Context ctx,JSONObject jsonObject) throws BOSException, EASBizException {
Map map = getStringObjectMap(ctx, jsonObject);
this.afterComplete(ctx, jsonObject);
return map;
}
public Map getStringObjectMap(Context ctx, JSONObject jsonObject) throws BOSException, EASBizException {
Map map = Maps.newHashMap();
map.put("state","success");
String signFlowStatus = jsonObject.getString("signFlowStatus");
String signFlowId = jsonObject.getString("signFlowId");
String statusDescription = jsonObject.getString("statusDescription");
EntityViewInfo view = new EntityViewInfo();
FilterInfo filterInfo = new FilterInfo();
filterInfo.getFilterItems().add(new FilterItemInfo("signFlowId='"+signFlowId+"'"));
view.setFilter(filterInfo);
SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
selectorItemCollection.add(new SelectorItemInfo("*"));
view.setSelector(selectorItemCollection);
IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(ctx);
ESignGlobalStatusOverviewCollection collection = globalStatusOverview.getESignGlobalStatusOverviewCollection(view);
for( int i=0;i