Browse Source

增加任务

9060 3 tháng trước cách đây
mục cha
commit
416358c2bd

+ 103 - 0
metadata/com/kingdee/eas/custom/esign/task/TaskOSFSericeFacade.facade

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<facade xmlns="com.kingdee.bos.metadata">
+    <package>com.kingdee.eas.custom.esign.task</package>
+    <name>TaskOSFSericeFacade</name>
+    <alias>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].alias</alias>
+    <description>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].description</description>
+    <userDefined>true</userDefined>
+    <bosType>6D4AC33D</bosType>
+    <stereoType>false</stereoType>
+    <businessImplName>com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade</businessImplName>
+    <businessControllerName>com.kingdee.eas.custom.esign.task.TaskOSFSericeFacadeController</businessControllerName>
+    <accessLevel>public</accessLevel>
+    <subClassingMode>normal</subClassingMode>
+    <methods>
+        <method>
+            <name>executeOsf</name>
+            <isListenerMethod>false</isListenerMethod>
+            <alias>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].alias</alias>
+            <description>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].description</description>
+            <innerID>d0e1057d-dbef-45e8-b2d9-08457eb6fba0</innerID>
+            <accessLevel>public</accessLevel>
+            <subClassingMode>normal</subClassingMode>
+            <returnValueType>String</returnValueType>
+            <metadataRef />
+            <transactionAttribute>Supports</transactionAttribute>
+            <userDefined>true</userDefined>
+            <userDefinedLogic />
+            <parameters>
+                <parameter>
+                    <name>serviceName</name>
+                    <alias>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[serviceName].alias</alias>
+                    <description>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[serviceName].description</description>
+                    <direction>in</direction>
+                    <dataType>String</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+                <parameter>
+                    <name>param</name>
+                    <alias>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[param].alias</alias>
+                    <description>facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[param].description</description>
+                    <direction>in</direction>
+                    <dataType>String</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+            </parameters>
+            <configured>false</configured>
+        </method>
+    </methods>
+    <resource>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="后台任务执行" />
+            <lang locale="zh_HK" value="後臺任務執行" />
+            <lang locale="zh_TW" value="後臺任務執行" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].extendedProperty.userDefined">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="执行osf" />
+            <lang locale="zh_HK" value="執行osf" />
+            <lang locale="zh_TW" value="執行osf" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[param].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="参数" />
+            <lang locale="zh_HK" value="參數" />
+            <lang locale="zh_TW" value="參數" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[param].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[serviceName].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="服务名称" />
+            <lang locale="zh_HK" value="服務名稱" />
+            <lang locale="zh_TW" value="服務名稱" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.esign.task.TaskOSFSericeFacade].methods.method[executeOsf].parameters.parameter[serviceName].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+    </resource>
+</facade>

+ 27 - 0
metadata/com/kingdee/eas/custom/esign/task/task.package

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="com.kingdee.bos.metadata">
+    <package>com.kingdee.eas.custom.esign.task</package>
+    <name>task</name>
+    <alias>package[com.kingdee.eas.custom.esign.task.task].alias</alias>
+    <description>package[com.kingdee.eas.custom.esign.task.task].description</description>
+    <basicCode />
+    <resource>
+        <rs key="package[com.kingdee.eas.custom.esign.task.task].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="任务" />
+            <lang locale="zh_HK" value="任務" />
+            <lang locale="zh_TW" value="任務" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.esign.task.task].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.esign.task.task].extendedProperty.userDefined">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+    </resource>
+</package>

+ 60 - 0
src/com/kingdee/eas/custom/esign/task/AbstractTaskOSFSericeFacadeControllerBean.java

@@ -0,0 +1,60 @@
+package com.kingdee.eas.custom.esign.task;
+
+import javax.ejb.*;
+import java.rmi.RemoteException;
+import com.kingdee.bos.*;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.bos.metadata.IMetaDataPK;
+import com.kingdee.bos.metadata.rule.RuleExecutor;
+import com.kingdee.bos.metadata.MetaDataPK;
+//import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.framework.ejb.AbstractEntityControllerBean;
+import com.kingdee.bos.framework.ejb.AbstractBizControllerBean;
+//import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.dao.IObjectCollection;
+import com.kingdee.bos.service.ServiceContext;
+import com.kingdee.bos.service.IServiceContext;
+import com.kingdee.eas.framework.Result;
+import com.kingdee.eas.framework.LineResult;
+import com.kingdee.eas.framework.exception.EASMultiException;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+
+import java.lang.String;
+
+
+
+public abstract class AbstractTaskOSFSericeFacadeControllerBean extends AbstractBizControllerBean implements TaskOSFSericeFacadeController
+{
+    protected AbstractTaskOSFSericeFacadeControllerBean()
+    {
+    }
+
+    protected BOSObjectType getBOSType()
+    {
+        return new BOSObjectType("6D4AC33D");
+    }
+
+    public String executeOsf(Context ctx, String serviceName, String param) throws BOSException
+    {
+        try {
+            ServiceContext svcCtx = createServiceContext(new MetaDataPK("d0e1057d-dbef-45e8-b2d9-08457eb6fba0"), new Object[]{ctx, serviceName, param});
+            invokeServiceBefore(svcCtx);
+            if(!svcCtx.invokeBreak()) {
+            String retValue = (String)_executeOsf(ctx, serviceName, param);
+            svcCtx.setMethodReturnValue(retValue);
+            }
+            invokeServiceAfter(svcCtx);
+            return (String)svcCtx.getMethodReturnValue();
+        } catch (BOSException ex) {
+            throw ex;
+        } finally {
+            super.cleanUpServiceState();
+        }
+    }
+    protected String _executeOsf(Context ctx, String serviceName, String param) throws BOSException
+    {    	
+        return null;
+    }
+
+}

+ 18 - 0
src/com/kingdee/eas/custom/esign/task/ITaskOSFSericeFacade.java

@@ -0,0 +1,18 @@
+package com.kingdee.eas.custom.esign.task;
+
+import com.kingdee.bos.BOSException;
+//import com.kingdee.bos.metadata.*;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+import com.kingdee.bos.Context;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.util.*;
+import java.lang.String;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.framework.*;
+
+public interface ITaskOSFSericeFacade extends IBizCtrl
+{
+    public String executeOsf(String serviceName, String param) throws BOSException;
+}

+ 51 - 0
src/com/kingdee/eas/custom/esign/task/TaskOSFSericeFacade.java

@@ -0,0 +1,51 @@
+package com.kingdee.eas.custom.esign.task;
+
+import com.kingdee.bos.framework.ejb.EJBRemoteException;
+import com.kingdee.bos.util.BOSObjectType;
+import java.rmi.RemoteException;
+import com.kingdee.bos.framework.AbstractBizCtrl;
+import com.kingdee.bos.orm.template.ORMObject;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.util.*;
+import com.kingdee.eas.custom.esign.task.*;
+import java.lang.String;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.framework.*;
+
+public class TaskOSFSericeFacade extends AbstractBizCtrl implements ITaskOSFSericeFacade
+{
+    public TaskOSFSericeFacade()
+    {
+        super();
+        registerInterface(ITaskOSFSericeFacade.class, this);
+    }
+    public TaskOSFSericeFacade(Context ctx)
+    {
+        super(ctx);
+        registerInterface(ITaskOSFSericeFacade.class, this);
+    }
+    public BOSObjectType getType()
+    {
+        return new BOSObjectType("6D4AC33D");
+    }
+    private TaskOSFSericeFacadeController getController() throws BOSException
+    {
+        return (TaskOSFSericeFacadeController)getBizController();
+    }
+    /**
+     *Ö´ÐÐosf-User defined method
+     *@param serviceName ·þÎñÃû³Æ
+     *@param param ²ÎÊý
+     *@return
+     */
+    public String executeOsf(String serviceName, String param) throws BOSException
+    {
+        try {
+            return getController().executeOsf(getContext(), serviceName, param);
+        }
+        catch(RemoteException err) {
+            throw new EJBRemoteException(err);
+        }
+    }
+}

+ 21 - 0
src/com/kingdee/eas/custom/esign/task/TaskOSFSericeFacadeController.java

@@ -0,0 +1,21 @@
+package com.kingdee.eas.custom.esign.task;
+
+import com.kingdee.bos.BOSException;
+//import com.kingdee.bos.metadata.*;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+import com.kingdee.bos.Context;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.util.*;
+import java.lang.String;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.framework.*;
+
+import java.rmi.RemoteException;
+import com.kingdee.bos.framework.ejb.BizController;
+
+public interface TaskOSFSericeFacadeController extends BizController
+{
+    public String executeOsf(Context ctx, String serviceName, String param) throws BOSException, RemoteException;
+}

+ 41 - 0
src/com/kingdee/eas/custom/esign/task/TaskOSFSericeFacadeControllerBean.java

@@ -0,0 +1,41 @@
+package com.kingdee.eas.custom.esign.task;
+
+import com.kingdee.eas.custom.esign.util.EsignConfig;
+import com.kingdee.shr.api.OSFWSClient;
+import org.apache.log4j.Logger;
+import javax.ejb.*;
+import java.rmi.RemoteException;
+import com.kingdee.bos.*;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.bos.metadata.IMetaDataPK;
+import com.kingdee.bos.metadata.rule.RuleExecutor;
+import com.kingdee.bos.metadata.MetaDataPK;
+//import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.framework.ejb.AbstractEntityControllerBean;
+import com.kingdee.bos.framework.ejb.AbstractBizControllerBean;
+//import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.dao.IObjectCollection;
+import com.kingdee.bos.service.ServiceContext;
+import com.kingdee.bos.service.IServiceContext;
+
+import java.lang.String;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TaskOSFSericeFacadeControllerBean extends AbstractTaskOSFSericeFacadeControllerBean
+{
+    private static Logger logger =
+        Logger.getLogger("com.kingdee.eas.custom.esign.task.TaskOSFSericeFacadeControllerBean");
+
+    @Override
+    protected String _executeOsf(Context ctx, String serviceName, String param) throws BOSException {
+        super._executeOsf(ctx, serviceName, param);
+        String shrAddr = EsignConfig.getInstance().get("shrAddr");
+        OSFWSClient client = new OSFWSClient();
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("data",param);
+        String response = client.proceedOSF(shrAddr, serviceName, map);
+        return response;
+    }
+}

+ 30 - 0
src/com/kingdee/eas/custom/esign/task/TaskOSFSericeFacadeFactory.java

@@ -0,0 +1,30 @@
+package com.kingdee.eas.custom.esign.task;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.BOSObjectFactory;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.bos.Context;
+
+public class TaskOSFSericeFacadeFactory
+{
+    private TaskOSFSericeFacadeFactory()
+    {
+    }
+    public static com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade getRemoteInstance() throws BOSException
+    {
+        return (com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade)BOSObjectFactory.createRemoteBOSObject(new BOSObjectType("6D4AC33D") ,com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade.class);
+    }
+    
+    public static com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade getRemoteInstanceWithObjectContext(Context objectCtx) throws BOSException
+    {
+        return (com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade)BOSObjectFactory.createRemoteBOSObjectWithObjectContext(new BOSObjectType("6D4AC33D") ,com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade.class, objectCtx);
+    }
+    public static com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade getLocalInstance(Context ctx) throws BOSException
+    {
+        return (com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade)BOSObjectFactory.createBOSObject(ctx, new BOSObjectType("6D4AC33D"));
+    }
+    public static com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade getLocalInstance(String sessionID) throws BOSException
+    {
+        return (com.kingdee.eas.custom.esign.task.ITaskOSFSericeFacade)BOSObjectFactory.createBOSObject(sessionID, new BOSObjectType("6D4AC33D"));
+    }
+}

+ 18 - 0
src/com/kingdee/eas/custom/esign/util/EsignHttpUtil.java

@@ -761,4 +761,22 @@ public class EsignHttpUtil {
         //发起接口请求
         return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
+
+    /**
+     * 查询签署流程列表
+     * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/kq4b2e
+     * 接口地址:https://{host}/v3/sign-flow/sign-flow-list
+     * @param ctx
+     * @param jsonMap
+     * @param sourceId
+     * 请求方法:GET
+     */
+    public static EsignHttpResponse sign_flow_list(Context ctx, Map<String,Object> jsonMap, String sourceId) throws EsignException {
+        EsignConfigEnum configEnum = EsignConfigEnum.sign_flow_list;
+        String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
+
+        String json = JSON.toJSONString(jsonMap);
+        //发起接口请求
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
+    }
 }

+ 161 - 188
websrc/com/kingdee/eas/custom/esign/osf/Create_by_fileOSFService.java

@@ -9,16 +9,23 @@ import com.google.common.collect.Sets;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.bsf.service.app.IHRMsfService;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
 import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.esign.*;
 import com.kingdee.eas.custom.esign.bizEnum.ComponentTypeEnum;
 import com.kingdee.eas.custom.esign.bizEnum.EsignStatusEnum;
 import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
 import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
 import com.kingdee.eas.custom.esign.util.EsignConfig;
 import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
 import org.apache.commons.lang3.StringUtils;
 
 import java.net.URISyntaxException;
+import java.sql.SQLException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -65,7 +72,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
                 JSONObject templateInfo = jsonObject.getJSONObject("templateInfo");
                 //设置待签署文件信息
                 List<Map<String, Object>> docs = null;
-                try {
+
                     docs = this.addDocs(context, jsonObject, templateInfo);
                     List<Map<String, Object>> signDocs = Lists.newArrayList();
                     for (Map<String, Object> doc : docs) {
@@ -74,10 +81,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
                         signDocs.add(docNew);
                     }
                     signMap.put("docs", signDocs);
-                } catch (EsignException e) {
-                    e.printStackTrace();
-                    resul.putAll(JSON.parseObject(e.getMessage()));
-                }
+
                 if (null != docs) {
                     //签署流程配置项
                     Map<String, Object> signFlowConfig = this.addSignFlowConfig(context, signFlowTitle, jsonObject);
@@ -111,7 +115,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
                     }
                 }
             }
-        } catch (EsignException | URISyntaxException e) {
+        } catch (EsignException | URISyntaxException | SQLException e) {
             e.printStackTrace();
             resul.put("code", 400);
             resul.put("message", e.getMessage());
@@ -276,173 +280,146 @@ public class Create_by_fileOSFService implements IHRMsfService {
      * @return
      * @throws EsignException
      */
-    public Map<String, List<Map<String, Object>>> addsignAreaList(Context context, Map<String, Object> fields, String fileId, String sourceId) throws EsignException {
-        Map<String, List<Map<String, Object>>> signListGroup = Maps.newHashMap();
-        for (Map.Entry<String, Object> field : fields.entrySet()) {
-            String componentId = field.getKey();
-            JSONObject fieldInfo = (JSONObject) field.getValue();
-            Object componentValue = fieldInfo.get("value");
-            Double positionX = fieldInfo.getDouble("positionX");
-            Double positionY = fieldInfo.getDouble("positionY");
-            Object pageNum = fieldInfo.get("pageNum");
-            String name = fieldInfo.getString("name");
-            String dataType = fieldInfo.getString("dataType");
+    public Map<String, Map<String, Map<String, Object>>> addsignAreaList(Context context, Map<String, Object> fields, String fileId, String sourceId,String docTemplateId) throws EsignException, BOSException, EASBizException, SQLException {
+        //Map<String, List<Map<String, Object>>> signListGroup = Maps.newHashMap();
+        Map<String, Map<String, Map<String, Object>>> signMapGroup = Maps.newHashMap();
+        //获取文件模版字段
+        IESignTemplateFileEntry ieSignTemplateFileEntry = ESignTemplateFileEntryFactory.getLocalInstance(context);
+        SelectorItemCollection selColl = new SelectorItemCollection();
+        selColl.add(new SelectorItemInfo("*"));
+        selColl.add(new SelectorItemInfo("fields.*"));
+        selColl.add(new SelectorItemInfo("fields.relatedControl.*"));
+        String sel = "select fid from CT_ESI_ESignTemplateFileEntry where cfeSignTemplateId = ?";
+        IRowSet rs = DbUtil.executeQuery(context,sel.toString(),new Object[]{docTemplateId});
+        String Entryid="";
+        if(rs.next()){
+            Entryid=rs.getString("fid");
+        }
+        ESignTemplateFileEntryInfo eSignTemplateFileEntry = ieSignTemplateFileEntry.getESignTemplateFileEntryInfo(new ObjectUuidPK(Entryid),selColl);
+        Map<String,ESignTemplateFileEntryFieldInfo> fieldsMap = Maps.newHashMap();
+        ESignTemplateFileEntryFieldCollection entryFieldCollection = eSignTemplateFileEntry.getFields();
+        for(int i=0;i<entryFieldCollection.size();i++){
+            ESignTemplateFileEntryFieldInfo fieldInfo=entryFieldCollection.get(i);
+            //失效的控件跳过
+            if(fieldInfo.isInvalid()){
+               continue;
+            }
+            String fieldId =fieldInfo.getTemplateFieldId().toString();
 
-            if (ComponentTypeEnum.SIGN_AREA.getAlias().equals(dataType)) {
+            JSONObject field= (JSONObject) fields.get(fieldId);
+            if (ComponentTypeEnum.SIGN_AREA.equals(fieldInfo.getComponentType())) {
                 Map<String, Object> signMap = Maps.newHashMap();
-                String[] keys = name.split("_");
-                String key = "签署方";
-                for (String k : keys) {
-                    if (k.startsWith("签署方")) {
-                        key = k;
-                        break;
-                    }
+                if(StringUtils.isBlank(fieldInfo.getSigningParty())){
+                    Map<String, Object> errMap = Maps.newHashMap();
+                    errMap.put("模版", eSignTemplateFileEntry.getName());
+                    errMap.put("控件", fieldInfo.getTemplateFieldName());
+                    errMap.put("内容", "签署方为空请维护!");
+                    throw new EsignException(JSON.toJSONString(errMap));
                 }
-                signMap.put("key", key);
+                signMap.put("key", fieldInfo.getSigningParty());
                 signMap.put("fileId", fileId);
+                signMap.put("fieldId", fieldInfo.getTemplateFieldId());
                 signMap.put("signFieldType", 0);
-                String keyword = keys[0];
+                String keyword =fieldInfo.getTemplateFieldName();
                 if (keyword.indexOf("骑缝") >= 0) {
                     signMap.put("signFieldStyle", 2);
-                } else {
-                    if (null == positionX || null == positionY) {
-                        signMap.put("signFieldStyle", 1);
-                        JSONObject coordinate = this.addPositions(context, fileId, keyword, sourceId);
-                        System.out.println("doc.coordinate:" + coordinate);
-                        if (null != coordinate) {
-                            double posX = coordinate.getDouble("positionX");
-                            double posY = coordinate.getDouble("positionY");
-                            for (String k : keys) {
-                                if (k.startsWith("X")) {
-                                    String x = k.replace("X", "");
-                                    posX = posX + Integer.parseInt(x);
-                                    signMap.put("posX", posX);
-                                    break;
-                                }
-                            }
-                            for (String k : keys) {
-                                if (k.startsWith("Y")) {
-                                    String y = k.replace("Y", "");
-                                    posY = posY + Integer.parseInt(y);
-                                    signMap.put("posY", posY);
-                                    break;
-                                }
-                            }
-                            signMap.put("positionX", coordinate.getDouble("positionX"));
-                            signMap.put("positionY", coordinate.getDouble("positionY"));
-                            signMap.put("positionPage", coordinate.get("positionPage"));
-                        }
-                    } else {
-                        double posX = positionX;
-                        double posY = positionY;
-                        for (String k : keys) {
-                            if (k.startsWith("X")) {
-                                String x = k.replace("X", "");
-                                posX = posX + Integer.parseInt(x);
-                                signMap.put("posX", posX);
-                                break;
-                            }
-                        }
-                        for (String k : keys) {
-                            if (k.startsWith("Y")) {
-                                String y = k.replace("Y", "");
-                                posY = posY + Integer.parseInt(y);
-                                signMap.put("posY", posY);
-                                break;
-                            }
-                        }
-                        signMap.put("positionX", positionX);
-                        signMap.put("positionY", positionY);
-                        signMap.put("positionPage", pageNum);
+                    signMap.put("positionX", fieldInfo.getPositionX());
+                    signMap.put("positionY", fieldInfo.getPositionY());
+                    signMap.put("positionPage", fieldInfo.getPageNum());
+
+                }else {
+                    signMap.put("signFieldStyle", 1);
+                    if(null==fieldInfo.getPositionX()&&null==fieldInfo.getPositionY()){
+                        Map<String, Object> errMap = Maps.newHashMap();
+                        errMap.put("模版", eSignTemplateFileEntry.getName());
+                        errMap.put("控件", fieldInfo.getTemplateFieldName());
+                        errMap.put("内容", "印章坐标为空请维护!");
+                        throw new EsignException(JSON.toJSONString(errMap));
                     }
+                    signMap.put("positionX", fieldInfo.getPositionX());
+                    signMap.put("positionY", fieldInfo.getPositionY());
+                    signMap.put("positionPage", fieldInfo.getPageNum());
                 }
-                List<Map<String, Object>> signList = signListGroup.get((String) signMap.get("key"));
-                if (null == signList) {
-                    signList = Lists.newArrayList();
-                    signListGroup.put((String) signMap.get("key"), signList);
-                }
-                signList.add(signMap);
-            } else if (ComponentTypeEnum.REMARK_SIGN_AREA.getAlias().equals(dataType)) {
-
-                Map<String, Object> signMap = Maps.newHashMap();
-
-                String[] keys = name.split("_");
-                String key = "签署方";
-                for (String k : keys) {
-                    if (k.startsWith("签署方")) {
-                        key = k;
-                        break;
-                    }
-                }
-                signMap.put("key", key);
-                signMap.put("fileId", fileId);
-                signMap.put("signFieldType", 1);
-
-                String keyword = keys[0];
-                if (keyword.indexOf("骑缝") >= 0) {
-                    signMap.put("signFieldStyle", 2);
-                } else {
-                    if (null == positionX || null == positionY) {
-                        signMap.put("signFieldStyle", 1);
-                        JSONObject coordinate = this.addPositions(context, fileId, keyword, sourceId);
-                        System.out.println("doc.coordinate:" + coordinate);
-                        if (null != coordinate) {
-                            double posX = coordinate.getDouble("positionX");
-                            double posY = coordinate.getDouble("positionY");
-                            for (String k : keys) {
-                                if (k.startsWith("X")) {
-                                    String x = k.replace("X", "");
-                                    posX = posX + Integer.parseInt(x);
-                                    signMap.put("posX", posX);
-                                    break;
-                                }
-                            }
-                            for (String k : keys) {
-                                if (k.startsWith("Y")) {
-                                    String y = k.replace("Y", "");
-                                    posY = posY + Integer.parseInt(y);
-                                    signMap.put("posY", posY);
-                                    break;
-                                }
-                            }
-                            signMap.put("positionX", coordinate.getDouble("positionX"));
-                            signMap.put("positionY", coordinate.getDouble("positionY"));
-                            signMap.put("positionPage", coordinate.get("positionPage"));
-                        }
-                    } else {
-                        double posX = positionX;
-                        double posY = positionY;
-                        for (String k : keys) {
-                            if (k.startsWith("X")) {
-                                String x = k.replace("X", "");
-                                posX = posX + Integer.parseInt(x);
-                                signMap.put("posX", posX);
-                                break;
-                            }
-                        }
-                        for (String k : keys) {
-                            if (k.startsWith("Y")) {
-                                String y = k.replace("Y", "");
-                                posY = posY + Integer.parseInt(y);
-                                signMap.put("posY", posY);
-                                break;
-                            }
-                        }
-                        signMap.put("positionX", positionX);
-                        signMap.put("positionY", positionY);
-                        signMap.put("positionPage", pageNum);
-                    }
+                Map<String, Map<String, Object>> skMap = signMapGroup.get((String) signMap.get("key"));
+                if (null == skMap) {
+                    skMap = Maps.newHashMap();
+                    signMapGroup.put((String) signMap.get("key"), skMap);
                 }
-                List<Map<String, Object>> signList = signListGroup.get((String) signMap.get("key"));
-                if (null == signList) {
-                    signList = Lists.newArrayList();
-                    signListGroup.put((String) signMap.get("key"), signList);
+                skMap.put(fieldInfo.getTemplateFieldId(),signMap);
+            }
+            //签署日期
+            if(ComponentTypeEnum.DATESIGNATURE.equals(fieldInfo.getComponentType())) {
+                fieldsMap.put(fieldId, fieldInfo);
+            }
+        }
+        //签署日期
+        for(Map.Entry<String,ESignTemplateFileEntryFieldInfo> fieldLinkEntry : fieldsMap.entrySet()){
+            //签署日期
+            ESignTemplateFileEntryFieldInfo fieldLink=fieldLinkEntry.getValue();
+            //签署方
+            ESignTemplateFileEntryFieldInfo fieldInfo=fieldLink.getRelatedControl();
+            if(null==fieldInfo){
+                Map<String, Object> errMap = Maps.newHashMap();
+                errMap.put("模版", eSignTemplateFileEntry.getName());
+                errMap.put("控件", fieldLink.getTemplateFieldName());
+                errMap.put("内容", "签署方关联关系为空请维护!");
+                throw new EsignException(JSON.toJSONString(errMap));
+            }
+            if(!ComponentTypeEnum.SIGN_AREA.equals(fieldInfo.getComponentType())){
+                Map<String, Object> errMap = Maps.newHashMap();
+                errMap.put("模版", eSignTemplateFileEntry.getName());
+                errMap.put("控件", fieldLink.getTemplateFieldName());
+                errMap.put("内容", "关联关系不为签署区,请检查!");
+                throw new EsignException(JSON.toJSONString(errMap));
+            }
+            Map<String, Object> signMap = Maps.newHashMap();
+            //签署日期坐标
+            Map<String, Object> signDateConfig = Maps.newHashMap();
+            signDateConfig.put("showSignDate", 1);
+            if (null!=fieldLink.getPositionX()&&null!=fieldLink.getPositionY()) {
+                signDateConfig.put("signDatePositionX", fieldLink.getPositionX());
+                signDateConfig.put("signDatePositionY", fieldLink.getPositionY());
+            }
+            if (null!=fieldLink.get("fontSize")) {
+                signDateConfig.put("fontSize", fieldLink.get("fontSize"));
+            }
+            if (null!=fieldLink.get("dateFormat")) {
+                signDateConfig.put("dateFormat", fieldLink.get("dateFormat"));
+            }
+            signMap.put("signDateConfig", signDateConfig);
+            signMap.put("key", fieldInfo.getSigningParty());
+            signMap.put("fileId", fileId);
+            signMap.put("signFieldType", 0);
+            String keyword =fieldInfo.getTemplateFieldName();
+            if (keyword.indexOf("骑缝") >= 0) {
+                signMap.put("signFieldStyle", 2);
+                signMap.put("positionX", fieldInfo.getPositionX());
+                signMap.put("positionY", fieldInfo.getPositionY());
+                signMap.put("positionPage", fieldInfo.getPageNum());
+            }else {
+                signMap.put("signFieldStyle", 1);
+                if(null==fieldInfo.getPositionX()&&null==fieldInfo.getPositionY()){
+                    Map<String, Object> errMap = Maps.newHashMap();
+                    errMap.put("模版", eSignTemplateFileEntry.getName());
+                    errMap.put("控件", fieldInfo.getTemplateFieldName());
+                    errMap.put("内容", "印章坐标为空请维护!");
+                    throw new EsignException(JSON.toJSONString(errMap));
                 }
-                signList.add(signMap);
+                signMap.put("positionX", fieldInfo.getPositionX());
+                signMap.put("positionY", fieldInfo.getPositionY());
+                signMap.put("positionPage", fieldInfo.getPageNum());
+            }
+            Map<String, Map<String, Object>> skMap = signMapGroup.get((String) signMap.get("key"));
+            if (null == skMap) {
+                skMap = Maps.newHashMap();
+                signMapGroup.put((String) signMap.get("key"), skMap);
             }
+            skMap.remove(fieldInfo.getTemplateFieldId());
+            skMap.put(fieldLink.getTemplateFieldId(),signMap);
         }
-        System.out.println("signListGroup:" + signListGroup);
-        return signListGroup;
+
+        System.out.println("signMapGroup:" + signMapGroup);
+        return signMapGroup;
     }
 
     /**
@@ -454,7 +431,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
      * @return
      * @throws EsignException
      */
-    public List<Map<String, Object>> addDocs(Context context, JSONObject jsonObject, JSONObject templateInfo) throws EsignException {
+    public List<Map<String, Object>> addDocs(Context context, JSONObject jsonObject, JSONObject templateInfo) throws EsignException, EASBizException, BOSException, SQLException {
         //设置待签署文件信息
         Map<String, Object> resul = Maps.newHashMap();
         List<Map<String, Object>> docs = Lists.newArrayList();
@@ -478,13 +455,10 @@ public class Create_by_fileOSFService implements IHRMsfService {
                     if (null != order) {
                         doc.put("order", Integer.parseInt(String.valueOf(order)));
                     }
-                    doc.put("positionX", null);
-                    doc.put("positionY", null);
-                    doc.put("positionPage", null);
                     System.out.println("addDocs:" + fieldObject);
                     JSONObject fields = fieldObject.getJSONObject("fields");
                     //取得这个文件的签署人的签署区
-                    Map<String, List<Map<String, Object>>> signAreaList = this.addsignAreaList(context, fields, (String) file.get("fileId"), sourceId);
+                    Map<String,  Map<String, Map<String, Object>>> signAreaList = this.addsignAreaList(context, fields, (String) file.get("fileId"), sourceId,docTemplateId);
                     doc.put("signListGroup", signAreaList);
                     docs.add(doc);
                 } else {
@@ -589,12 +563,12 @@ public class Create_by_fileOSFService implements IHRMsfService {
         }
         List<Map<String, Object>> signFields = Lists.newArrayList();
         for (Map<String, Object> doc : docs) {
-            Map<String, List<Map<String, Object>>> signListGroup = (Map<String, List<Map<String, Object>>>) doc.get("signListGroup");
+            Map<String, Map<String, Map<String, Object>>> signListGroup = (Map<String,Map<String, Map<String, Object>>>) doc.get("signListGroup");
             //判断是否存在签署区
             if(null!=signListGroup && signListGroup.size()>0){
-                List<Map<String, Object>> fieldList = signListGroup.get(signName);
+                Map<String, Map<String, Object>> fieldList = signListGroup.get(signName);
                 if(null!=fieldList) {
-                    for (Map<String, Object> fieldMap : fieldList) {
+                    for (Map<String, Object> fieldMap : fieldList.values()) {
                         Map<String, Object> field = Maps.newHashMap();
                         field.put("fileId", fieldMap.get("fileId"));
                         field.put("customBizNum", doc.get("fileName"));
@@ -619,12 +593,6 @@ public class Create_by_fileOSFService implements IHRMsfService {
                                         signFieldPosition.put("positionPage", fieldMap.get("positionPage"));
                                         signFieldPosition.put("positionX", fieldMap.get("positionX"));
                                         signFieldPosition.put("positionY", fieldMap.get("positionY"));
-                                        if (null != fieldMap.get("posX")) {
-                                            signFieldPosition.put("positionX", fieldMap.get("posX"));
-                                        }
-                                        if (null != fieldMap.get("posY")) {
-                                            signFieldPosition.put("positionY", fieldMap.get("posY"));
-                                        }
                                     } else {
                                         Map<String, Object> res = Maps.newHashMap();
                                         //失败
@@ -633,10 +601,14 @@ public class Create_by_fileOSFService implements IHRMsfService {
                                     }
                                 } else {
                                     //骑缝章
+                                    signFieldPosition.put("positionY", fieldMap.get("positionY"));
                                 }
                                 normalSignFieldConfig.put("signFieldPosition", signFieldPosition);
-                                Map<String, Object> signDateConfig = Maps.newHashMap();
-                                signDateConfig.put("showSignDate", 1);
+                                Map<String, Object> signDateConfig = (Map<String, Object>) fieldMap.get("signDateConfig");
+                                if(null==signDateConfig) {
+                                    signDateConfig = Maps.newHashMap();
+                                    //signDateConfig.put("showSignDate", 1);
+                                }
                                 field.put("signDateConfig", signDateConfig);
                             } else {
                                 //手动签章
@@ -737,10 +709,10 @@ public class Create_by_fileOSFService implements IHRMsfService {
             signName = "签署方" + signOrder;
         }
         for (Map<String, Object> doc : docs) {
-            Map<String, List<Map<String, Object>>> signListGroup = (Map<String, List<Map<String, Object>>>) doc.get("signListGroup");
-            List<Map<String, Object>> fieldList = signListGroup.get(signName);
+            Map<String,  Map<String, Map<String, Object>>> signListGroup = (Map<String, Map<String, Map<String, Object>>>) doc.get("signListGroup");
+             Map<String, Map<String, Object>> fieldList = signListGroup.get(signName);
             if(null!=fieldList) {
-                for (Map<String, Object> fieldMap : fieldList) {
+                for (Map<String, Object> fieldMap : fieldList.values()) {
                     Map<String, Object> field = Maps.newHashMap();
                     field.put("fileId", fieldMap.get("fileId"));
                     field.put("customBizNum", doc.get("fileName"));
@@ -749,7 +721,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
                         //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
                         Map<String, Object> normalSignFieldConfig = Maps.newHashMap();
                         //手动签章
-                        normalSignFieldConfig.put("freeMode", true);
+                        normalSignFieldConfig.put("freeMode", false);
                         normalSignFieldConfig.put("autoSign", false);
                         //印章id
                         //normalSignFieldConfig.put("assignedSealId", orgSignerInfo.getString("sealId"));
@@ -762,19 +734,17 @@ public class Create_by_fileOSFService implements IHRMsfService {
                                 signFieldPosition.put("positionPage", fieldMap.get("positionPage"));
                                 signFieldPosition.put("positionX", fieldMap.get("positionX"));
                                 signFieldPosition.put("positionY", fieldMap.get("positionY"));
-                                if (null != fieldMap.get("posX")) {
-                                    signFieldPosition.put("positionX", fieldMap.get("posX"));
-                                }
-                                if (null != fieldMap.get("posY")) {
-                                    signFieldPosition.put("positionY", fieldMap.get("posY"));
-                                }
                             }
                         } else {
                             //骑缝章
+                            signFieldPosition.put("positionY", fieldMap.get("positionY"));
                         }
                         normalSignFieldConfig.put("signFieldPosition", signFieldPosition);
-                        Map<String, Object> signDateConfig = Maps.newHashMap();
-                        signDateConfig.put("showSignDate", 1);
+                        Map<String, Object> signDateConfig = (Map<String, Object>) fieldMap.get("signDateConfig");
+                        if(null==signDateConfig) {
+                            signDateConfig = Maps.newHashMap();
+                            signDateConfig.put("showSignDate", 1);
+                        }
                         field.put("signDateConfig", signDateConfig);
                         field.put("normalSignFieldConfig", normalSignFieldConfig);
                     } else {
@@ -898,6 +868,9 @@ public class Create_by_fileOSFService implements IHRMsfService {
             if (ComponentTypeEnum.SIGN_AREA.getAlias().equals(dataType)) {
                 continue;
             }
+            if (ComponentTypeEnum.DATESIGNATURE.getAlias().equals(dataType)) {
+                continue;
+            }
             component.put("componentValue", fieldInfo.get("value"));
             components.add(component);
         }

+ 249 - 0
websrc/com/kingdee/eas/custom/esign/osf/EsignFlowListOSFService.java

@@ -0,0 +1,249 @@
+package com.kingdee.eas.custom.esign.osf;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+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.dao.IObjectPK;
+import com.kingdee.bos.rabbitmq.guava.Lists;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.person.PersonInfo;
+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.EsignConfigEnum;
+import com.kingdee.eas.custom.esign.bizEnum.EsignStatusEnum;
+import com.kingdee.eas.custom.esign.bizEnum.SendStatusEnum;
+import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
+import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
+import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
+import com.kingdee.eas.custom.esign.util.SyncSignedFilesUtil;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import org.apache.commons.lang3.StringUtils;
+
+import java.sql.SQLException;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * description: EsignFlowListOSFService <br>
+ * date: 4/1/2026 下午 4:23 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class EsignFlowListOSFService implements IHRMsfService {
+
+    public static LocalDateTime formatter(String time) {
+        LocalDateTime dateTime = null;
+        if (time.length() == 10) {
+            LocalDate localD = LocalDate.parse(time);
+            LocalTime localT = LocalTime.of(0, 0, 0);
+            dateTime = LocalDateTime.of(localD, localT);
+        } else if (time.length() == 16) {
+            dateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
+        } else if (time.length() == 19) {
+            dateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        }
+        return dateTime;
+    }
+
+    public static LocalDateTime startDateTimeNow() {
+        LocalDate localD1 = LocalDate.now();
+        LocalTime time1 = LocalTime.now();
+        LocalTime localT1 = LocalTime.of(time1.getHour(), 0, 0);
+        LocalDateTime dateTime = LocalDateTime.of(localD1, localT1);
+        dateTime=dateTime.minusHours(1);
+        return dateTime;
+    }
+
+    public static LocalDateTime endDateTimeNow() {
+        LocalDate localD2 = LocalDate.now();
+        LocalTime localT2 = LocalTime.of(23, 59, 59);
+        LocalDateTime dateTime = LocalDateTime.of(localD2, localT2);
+        return dateTime;
+    }
+
+    @Override
+    public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
+        String param = (String) map.get("data");
+        LocalDateTime startDateTime = null;
+        LocalDateTime endDateTime = null;
+        StringBuilder msg = new StringBuilder();
+        if (StringUtils.isNotBlank(param)) {
+            JSONObject object = JSON.parseObject(param);
+            String startTime = object.getString("startTime");
+            String endTime = object.getString("endTime");
+            String status = object.getString("status");
+            String advanceHours = object.getString("advanceHours");
+
+            if (StringUtils.isNotBlank(startTime)
+                    &&
+                    StringUtils.isNotBlank(endTime)
+            ) {
+                startDateTime = this.formatter(startTime);
+                endDateTime = this.formatter(endTime);
+            }
+            if (null == startDateTime || null == endDateTime) {
+                startDateTime = startDateTimeNow();
+                endDateTime = endDateTimeNow();
+            }
+            startDateTime = startDateTime.minusHours(Integer.parseInt(advanceHours));
+        }
+        if (null == startDateTime || null == endDateTime) {
+            startDateTime = startDateTimeNow();
+            endDateTime = endDateTimeNow();
+        }
+        int pageNum=0;
+        int pageSize=100;
+        long totalNum=1;
+        do {
+            pageNum++;
+            Map<String, Object> jsonMap = Maps.newHashMap();
+            long signFlowStartTimeFrom = startDateTime.atZone(ZoneId.systemDefault())
+                    .toInstant()
+                    .toEpochMilli();
+            long signFlowStartTimeTo = endDateTime.atZone(ZoneId.systemDefault())
+                    .toInstant()
+                    .toEpochMilli();
+            jsonMap.put("signFlowStartTimeFrom", signFlowStartTimeFrom);
+            jsonMap.put("signFlowStartTimeTo", signFlowStartTimeTo);
+            jsonMap.put("pageNum", pageNum);
+            jsonMap.put("pageSize", pageSize);
+            List<String> list = Lists.newArrayList();
+            list.add("2");
+            jsonMap.put("signFlowStatus", list);
+            try {
+                IESignGlobalStatusOverview overview = ESignGlobalStatusOverviewFactory.getLocalInstance(context);
+                EsignHttpResponse response = EsignHttpUtil.sign_flow_list(context, jsonMap, "查询签署流程列表");
+                JSONObject jsonObject = JSON.parseObject(response.getBody());
+                int code =jsonObject.getInteger("code");
+                if (0==code){
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    if (null!=data){
+                        long total = data.getLong("total");
+                        if(total%pageSize==0){
+                            totalNum=total/pageSize;
+                        }else {
+                            totalNum=total/pageSize+1;
+                        }
+                        JSONArray signFlowInfos = data.getJSONArray("signFlowInfos");
+                        for (int i=0;i<signFlowInfos.size();i++){
+                            JSONObject signFlowInfo = signFlowInfos.getJSONObject(i);
+                            String signFlowId = signFlowInfo.getString("signFlowId");
+                            String sel = "select fid from CT_ESI_ESGSO where CFSignFlowId ='"+signFlowId+"'";
+                            IRowSet rowSet = DbUtil.executeQuery(context,sel);
+                            if(rowSet.size()<=0){
+                                ESignGlobalStatusOverviewInfo nowInfo = new ESignGlobalStatusOverviewInfo();
+                                nowInfo.setSignFlowId(signFlowId);
+                                nowInfo.setEsignStatus(EsignStatusEnum.COMPLETED);
+                                nowInfo.setEsignName(EsignConfigEnum.sign_flow_list);
+                                nowInfo.setRequestParams(response.getBody());
+                                nowInfo.setFiesign(true);
+                                nowInfo.setSendStatus(SendStatusEnum.SUCCESS);
+                                JSONArray signers = signFlowInfo.getJSONArray("signers");
+                                for(int x=0;x<signers.size();x++) {
+                                    JSONObject signer = signers.getJSONObject(x);
+                                    JSONObject psnSigner=signer.getJSONObject("psnSigner");
+                                    if (null==psnSigner){
+                                        continue;
+                                    }
+                                    JSONObject psnAccount=psnSigner.getJSONObject("psnAccount");
+                                    String accountMobile = psnAccount.getString("accountMobile");
+                                    String accountEmail = psnAccount.getString("accountEmail");
+                                    if(StringUtils.isNotBlank(accountMobile)){
+                                        String selp = "select fid from t_bd_person where FNCELL='"+accountMobile+"'";
+                                        IRowSet rs = DbUtil.executeQuery(context,selp);
+                                        if (rs.next()){
+                                            String fid = rs.getString("fid");
+                                            PersonInfo personInfo = new PersonInfo();
+                                            personInfo.setId(BOSUuid.read(fid));
+                                            nowInfo.setPerson(personInfo);
+                                        }
+                                    }else {
+                                        String selp = "select fid from t_bd_person where FEMail='"+accountEmail+"'";
+                                        IRowSet rs = DbUtil.executeQuery(context,selp);
+                                        if (rs.next()){
+                                            String fid = rs.getString("fid");
+                                            PersonInfo personInfo = new PersonInfo();
+                                            personInfo.setId(BOSUuid.read(fid));
+                                            nowInfo.setPerson(personInfo);
+                                        }
+                                    }
+                                }
+                                if(null!=nowInfo.getPerson()) {
+                                    IObjectPK pk = overview.addnew(nowInfo);
+                                    SyncSignedFilesUtil.syncAttachmentsForEmpPage(context,pk.toString());
+                                }
+                            }
+                        }
+                    }
+                }
+            } catch (EsignException | SQLException e) {
+                e.printStackTrace();
+            }
+        } while (pageNum<totalNum);
+        return "ok";
+    }
+
+    public static void main(String[] args) {
+        System.setProperty("EAS_HOME","D:\\project\\kingdeeV90\\Project_hty\\tengda");
+        LocalDateTime startDateTime = null;
+        LocalDateTime endDateTime = null;
+        if (null == startDateTime || null == endDateTime) {
+            startDateTime = formatter("2025-02-01");;
+            endDateTime = endDateTimeNow();
+        }
+        int pageNum=0;
+        int pageSize=20;
+        long totalNum=1;
+        do {
+            pageNum++;
+            Map<String, Object> jsonMap = Maps.newHashMap();
+            long signFlowStartTimeFrom = startDateTime.atZone(ZoneId.systemDefault())
+                    .toInstant()
+                    .toEpochMilli();
+            long signFlowStartTimeTo = endDateTime.atZone(ZoneId.systemDefault())
+                    .toInstant()
+                    .toEpochMilli();
+            jsonMap.put("signFlowStartTimeFrom", signFlowStartTimeFrom);
+            jsonMap.put("signFlowStartTimeTo", signFlowStartTimeTo);
+            jsonMap.put("pageNum", pageNum);
+            jsonMap.put("pageSize", pageSize);
+            List<String> list = Lists.newArrayList();
+            //list.add("1");
+            list.add("2");
+            //list.add("3");
+            jsonMap.put("signFlowStatus", list);
+            try {
+                EsignHttpResponse response = EsignHttpUtil.sign_flow_list(null, jsonMap, "查询签署流程列表");
+                System.out.println(response.getBody());
+                JSONObject jsonObject = JSON.parseObject(response.getBody());
+                int code =jsonObject.getInteger("code");
+                if (0==code){
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    if (null!=data){
+                        JSONArray signFlowInfos = data.getJSONArray("signFlowInfos");
+                        System.out.println(signFlowInfos.size());
+                        long total = data.getLong("total");
+                        if(total%pageSize==0){
+                            totalNum=total/pageSize;
+                        }else {
+                            totalNum=total/pageSize+1;
+                        }
+                    }
+                }
+            } catch (EsignException e) {
+                e.printStackTrace();
+            }
+        } while (pageNum<totalNum);
+    }
+}

+ 140 - 0
websrc/com/kingdee/shr/base/syssetting/web/handler/WSUserEditHandler.java

@@ -0,0 +1,140 @@
+package com.kingdee.shr.base.syssetting.web.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.base.permission.PermItemInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.shr.base.permission.api.service.SHRFunctionPermissionService;
+import com.kingdee.shr.base.syssetting.app.cache.PermItemURLCache;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
+import com.kingdee.shr.base.syssetting.util.FileOperateUtil;
+import com.kingdee.shr.base.syssetting.util.SHRSyssettingUtil;
+import com.kingdee.shr.websso.IWSUser;
+import com.kingdee.shr.websso.WSUserFactory;
+import com.kingdee.shr.websso.WSUserInfo;
+import com.kingdee.util.StringUtils;
+import com.kingdee.util.UuidException;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.Properties;
+
+/**
+ * description: WSUserEditHandler <br>
+ * date: 20/11/2025 ÉÏÎç 11:19 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class WSUserEditHandler extends EditHandler {
+    private static Logger logger = Logger.getLogger(WSUserEditHandler.class);
+
+    public WSUserEditHandler() {
+    }
+
+    protected void beforeRender(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        WSUserInfo wsUser = (WSUserInfo)modelMap.get("model");
+        if (wsUser != null && wsUser.getId() != null && !StringUtils.isEmpty(wsUser.getPasswd())) {
+            String operateStatus = this.getOperateStatus(request, modelMap);
+            if ("EDIT".equalsIgnoreCase(operateStatus)) {
+                wsUser.setPasswd((String)null);
+            } else {
+                String bs = this.substitution(wsUser.getPasswd());
+                wsUser.setPasswd(bs);
+            }
+        }
+
+        super.beforeRender(request, response, modelMap);
+    }
+
+    public String downloadAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        String wsUserId = request.getParameter("billId");
+        if (StringUtils.isEmpty(wsUserId)) {
+            throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "sdk_non_existent"));
+        } else {
+            File propFile = null;
+
+            try {
+                Context ctx = SHRContext.getInstance().getContext();
+                String permItemUrl = "/dynamic.do?method=initalize#uri=com.kingdee.shr.websso.app.WSUser.form";
+                PermItemInfo permItem = PermItemURLCache.getPermItemInfoByURL(ctx, permItemUrl);
+                SHRFunctionPermissionService.checkCurrnetUserFunctionPermission(ctx, permItem);
+                IWSUser instance = WSUserFactory.getRemoteInstance();
+                WSUserInfo wsUser = (WSUserInfo)((WSUserInfo)instance.getValue(new ObjectUuidPK(BOSUuid.read(wsUserId))));
+                String realPath = SHRSyssettingUtil.getShrPropertiesPath();
+                StringBuffer sb = new StringBuffer();
+                String zipPath = sb.append(realPath).append(File.separator).append("osf_ws_client").append(File.separator).toString();
+                propFile = new File(zipPath + "userInfo.properties");
+                if (!propFile.exists()) {
+                    propFile.createNewFile();
+                }
+
+                boolean isCloudServ = false;
+                this.writePropFile(propFile, wsUser, isCloudServ);
+                String userInfoP = "com/kingdee/shr/osf/webservice/client/userInfo.properties";
+                FileOperateUtil.downloadSDK(zipPath, propFile, userInfoP, response);
+            } catch (IOException var21) {
+                logger.error(var21.getMessage());
+                throw new SHRWebException(var21.getMessage(), var21);
+            } catch (EASBizException var22) {
+                throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "download_fails"), var22);
+            } catch (UuidException | BOSException var23) {
+                throw new SHRWebException(var23.getMessage(), var23);
+            } finally {
+                if (propFile != null) {
+                    propFile.delete();
+                }
+
+            }
+
+            return null;
+        }
+    }
+
+    private void writePropFile(File propFile, WSUserInfo wsUser, boolean isCloudServ) throws ShrWebBizException {
+        Properties prop = new Properties();
+        prop.setProperty("easAddr", wsUser.getShrAddr());
+        prop.setProperty("userName", wsUser.getUserName());
+        String pwd = wsUser.getPasswd();
+        prop.setProperty("password", pwd);
+        prop.setProperty("dcName", wsUser.getDcName());
+        prop.setProperty("slnName", wsUser.getSlnName());
+        prop.setProperty("language", wsUser.getLanguage().getValue());
+        prop.setProperty("dbType", (String)wsUser.get("dbtype"));
+        if (isCloudServ) {
+            prop.setProperty("isCloudServ", "true");
+        }
+
+        FileOutputStream fos = null;
+
+        try {
+            fos = new FileOutputStream(propFile, false);
+            prop.store(fos, (String)null);
+        } catch (FileNotFoundException var12) {
+            throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "api_user_config_non_exist"), var12);
+        } catch (IOException var13) {
+            throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "api_user_config_add_fails"), var13);
+        } finally {
+            FileOperateUtil.closeStream(new Closeable[]{fos});
+        }
+
+    }
+
+    private String substitution(String str) {
+        int length = str.length();
+        StringBuffer sb = new StringBuffer();
+
+        for(int i = 0; i < length; ++i) {
+            sb.append("*");
+        }
+
+        return sb.toString();
+    }
+}