9060 19 時間 前
コミット
0d3a9c2d17

+ 12 - 0
js/addon/custom/js/eSign/ESignGlobalStatusOverviewList.js

@@ -77,6 +77,18 @@ shr.defineClass("shr.esign.ESignGlobalStatusOverviewList", shr.framework.List, {
             billId: selectedIds
         });
     },
+    /**
+     *  同步签署状态
+     */
+    detail_sign_fieldsAction: function () {
+        var _self = this;
+
+        var selectedIds = this.getSelectedIds();
+        _self.doRemoteWithBatchAction({
+            method: 'detail_sign_fields',
+            billId: selectedIds
+        });
+    },
     /**
      * 执行远程服务端方法,适用于有批量操作的远程调用
      */

+ 6 - 1
properties/esign/esignConfig.properties

@@ -46,5 +46,10 @@ org_own_seal_list=/v3/seals/org-own-seal-list?orgId={0}&pageNum={1}&pageSize={2}
 org_authorized_seal_list=/v3/seals/org-authorized-seal-list?orgId={0}&pageNum={1}&pageSize={2}
 #查询被外部企业授权印章
 orgId=b7cef1b902dd42568baaf5865ac09536
-#
+#查询文件上传状态
 getFilesState=/v3/files/{0}
+#检索文件关键字坐标
+keyword_positions=/v3/files/{0}/keyword-positions
+
+#获取拖章定位页面
+get_seal_position_url=/v3/files/get-seal-position-url

+ 5 - 0
src/com/kingdee/eas/custom/esign/app/ESignTemplateControllerBean.java

@@ -43,8 +43,13 @@ public class ESignTemplateControllerBean extends AbstractESignTemplateController
         ComponentTypeEnumSet.add(ComponentTypeEnum.DATE_VALUE);
         ComponentTypeEnumSet.add(ComponentTypeEnum.MULTILINETEXT_VALUE);
         ComponentTypeEnumSet.add(ComponentTypeEnum.ID_CARD_NUMBER_VALUE);
+
         ComponentTypeEnumSet.add(ComponentTypeEnum.PHONE_NUMBER_VALUE);
         ComponentTypeEnumSet.add(ComponentTypeEnum.SIGN_AREA_VALUE);
+        ComponentTypeEnumSet.add(ComponentTypeEnum.CHECKBOX_VALUE);
+        ComponentTypeEnumSet.add(ComponentTypeEnum.RADIOBUTTON_VALUE);
+        ComponentTypeEnumSet.add(ComponentTypeEnum.TICKBOX_VALUE);
+        ComponentTypeEnumSet.add(ComponentTypeEnum.COMBOBOX_VALUE);
     }
 
 

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

@@ -9,6 +9,7 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.ContextUtils;
 import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+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;
@@ -735,4 +736,33 @@ public class EsignHttpUtil {
         //发起接口请求
         return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
+
+    /**
+     * 获取拖章定位页面
+     * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/gw0r0w5qb5cx2ft6
+     * 接口地址:https://{host}/v3/files/get-seal-position-url
+     * @param ctx
+     * @param fileId
+     * @param keywords
+     * @param sourceId
+     * 请求方法:POST
+     */
+    public static EsignHttpResponse get_seal_position_url(Context ctx,String fileId, String sourceId) throws EsignException {
+        EsignConfigEnum configEnum = EsignConfigEnum.keyword_positions;
+        String apiaddr = EsignConfig.getInstance().get("get_seal_position_url");
+        apiaddr = MessageFormat.format(apiaddr, fileId);
+        Map<String,Object> jsonMap = Maps.newHashMap();
+        List<String> signerRoles = Lists.newArrayList();
+        signerRoles.add("甲方(盖章)_签署方1");
+        signerRoles.add("乙方(签字捺手印)_签署方2");
+        jsonMap.put("customBizNum",System.currentTimeMillis());
+        jsonMap.put("fileId",System.currentTimeMillis());
+        jsonMap.put("signerRoles",signerRoles);
+        jsonMap.put("clientType","ALL");
+        jsonMap.put("redirectUrl","http://hrtest.tenda.cn:8080/callback/callBackToOSF");
+
+        String json = JSON.toJSONString(jsonMap);
+        //发起接口请求
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
+    }
 }

+ 72 - 61
websrc/com/kingdee/eas/custom/esign/osf/Create_by_fileOSFService.java

@@ -530,6 +530,8 @@ public class Create_by_fileOSFService implements IHRMsfService {
      * @throws URISyntaxException
      */
     public Map<String, Object> addOrgSignerInfo(Context context, JSONObject orgSignerInfo, List<Map<String, Object>> docs, String sourceId) throws EsignException, URISyntaxException {
+        List< Map<String, Object>> resulList = Lists.newArrayList();
+
         Map<String, Object> resul = Maps.newHashMap();
         Map<String, Object> signMapInfo = Maps.newHashMap();
         Map<String, Object> orgPsnSignMap = Maps.newHashMap();
@@ -588,71 +590,77 @@ 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");
-            List<Map<String, Object>> fieldList = signListGroup.get(signName);
-            if(null!=fieldList) {
-                for (Map<String, Object> fieldMap : fieldList) {
-                    Map<String, Object> field = Maps.newHashMap();
-                    field.put("fileId", fieldMap.get("fileId"));
-                    field.put("customBizNum", sourceId);
-                    if (0 == ((int) fieldMap.get("signFieldType"))) {
-                        field.put("signFieldType", fieldMap.get("signFieldType"));
-                        //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
-                        Map<String, Object> normalSignFieldConfig = Maps.newHashMap();
-                        if (true == orgSignerInfo.getBoolean("isRadio")) {
-                            //企业/机构自动落章(autoSign为true),请不要传该参数。
-                            orgPsnSignMap.remove("transactorInfo");
-                            //自动落章
-                            normalSignFieldConfig.put("freeMode", false);
-                            normalSignFieldConfig.put("autoSign", true);
-                            //印章id
-                            normalSignFieldConfig.put("assignedSealId", orgSignerInfo.getString("sealId"));
-                            //印章类型:1印章,2骑缝章
-                            normalSignFieldConfig.put("signFieldStyle", fieldMap.get("signFieldStyle"));
-                            Map<String, Object> signFieldPosition = Maps.newHashMap();
-                            if (1 == ((int) fieldMap.get("signFieldStyle"))) {
-                                //正常章
-                                if (null != fieldMap.get("positionPage") && null != fieldMap.get("positionX") && null != fieldMap.get("positionY")) {
-                                    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"));
+            //判断是否存在签署区
+            if(null!=signListGroup && signListGroup.size()>0){
+                List<Map<String, Object>> fieldList = signListGroup.get(signName);
+                if(null!=fieldList) {
+                    for (Map<String, Object> fieldMap : fieldList) {
+                        Map<String, Object> field = Maps.newHashMap();
+                        field.put("fileId", fieldMap.get("fileId"));
+                        field.put("customBizNum", doc.get("fileName"));
+                        if (0 == ((int) fieldMap.get("signFieldType"))) {
+                            field.put("signFieldType", fieldMap.get("signFieldType"));
+                            //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
+                            Map<String, Object> normalSignFieldConfig = Maps.newHashMap();
+                            if (true == orgSignerInfo.getBoolean("isRadio")) {
+                                //企业/机构自动落章(autoSign为true),请不要传该参数。
+                                orgPsnSignMap.remove("transactorInfo");
+                                //自动落章
+                                normalSignFieldConfig.put("freeMode", false);
+                                normalSignFieldConfig.put("autoSign", true);
+                                //印章id
+                                normalSignFieldConfig.put("assignedSealId", orgSignerInfo.getString("sealId"));
+                                //印章类型:1印章,2骑缝章
+                                normalSignFieldConfig.put("signFieldStyle", fieldMap.get("signFieldStyle"));
+                                Map<String, Object> signFieldPosition = Maps.newHashMap();
+                                if (1 == ((int) fieldMap.get("signFieldStyle"))) {
+                                    //正常章
+                                    if (null != fieldMap.get("positionPage") && null != fieldMap.get("positionX") && null != fieldMap.get("positionY")) {
+                                        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 {
+                                    //骑缝章
                                 }
+                                normalSignFieldConfig.put("signFieldPosition", signFieldPosition);
+                                Map<String, Object> signDateConfig = Maps.newHashMap();
+                                signDateConfig.put("showSignDate", 1);
+                                field.put("signDateConfig", signDateConfig);
                             } else {
-                                //骑缝章
+                                //手动签章
+                                normalSignFieldConfig.put("freeMode", true);
+                                normalSignFieldConfig.put("autoSign", false);
                             }
-                            normalSignFieldConfig.put("signFieldPosition", signFieldPosition);
-                            Map<String, Object> signDateConfig = Maps.newHashMap();
-                            signDateConfig.put("showSignDate", 1);
-                            field.put("signDateConfig", signDateConfig);
+                            field.put("normalSignFieldConfig", normalSignFieldConfig);
                         } else {
-                            //手动签章
-                            normalSignFieldConfig.put("freeMode", true);
-                            normalSignFieldConfig.put("autoSign", false);
+                            field.put("signFieldType", fieldMap.get("signFieldType"));
+                            //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
+                            Map<String, Object> remarkSignFieldConfig = Maps.newHashMap();
+                            remarkSignFieldConfig.put("freeMode", true);
+                            remarkSignFieldConfig.put("inputType", 2);
+                            field.put("remarkSignFieldConfig", remarkSignFieldConfig);
                         }
-                        field.put("normalSignFieldConfig", normalSignFieldConfig);
-                    } else {
-                        field.put("signFieldType", fieldMap.get("signFieldType"));
-                        //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
-                        Map<String, Object> remarkSignFieldConfig = Maps.newHashMap();
-                        remarkSignFieldConfig.put("freeMode", true);
-                        remarkSignFieldConfig.put("inputType", 2);
-                        field.put("remarkSignFieldConfig", remarkSignFieldConfig);
+                        signFields.add(field);
                     }
-                    signFields.add(field);
                 }
-            }else {
-                //失败
-                resul.put("文件模板:"+doc.get("fileName"),signName+",未匹配到签署区,请检查模板的签署区命名规范。签署区命名规则:如(“甲方:(盖章)_签署方1_X50_Y50“)根据“_”分割字符串,第一个是要盖章的内容位置标识;第二个是签署方用来判断这个签署区是谁的;X50表示:印章位置向右移动50;Y50表示:印章位置向上移动50");
-
-                // resul.put("data",signListGroup);
-                throw new EsignException(JSON.toJSONString(resul));
+                else {
+                    Map<String, Object> res = Maps.newHashMap();
+                    //失败
+                    res.put("文件模板:"+doc.get("fileName"),signName+",未匹配到签署区,请检查模板的签署区命名规范。签署区命名规则:如(“甲方:(盖章)_签署方1_X50_Y50“)根据“_”分割字符串,第一个是要盖章的内容位置标识;第二个是签署方用来判断这个签署区是谁的;X50表示:印章位置向右移动50;Y50表示:印章位置向上移动50");
+                    resulList.add(res);
+                }
             }
         }
+        if(signFields.size()<=0) {
+            throw new EsignException(JSON.toJSONString(resulList));
+        }
         signMapInfo.put("signFields", signFields);
         signMapInfo.put("signerType", 1);
         return signMapInfo;
@@ -670,6 +678,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
      * @throws URISyntaxException
      */
     public Map<String, Object> addPsnSignerInfo(Context context, JSONObject psnSignerInfo, List<Map<String, Object>> docs, String sourceId) throws EsignException, URISyntaxException {
+        List< Map<String, Object>> resulList = Lists.newArrayList();
         Map<String, Object> resul = Maps.newHashMap();
         Map<String, Object> signMapInfo = Maps.newHashMap();
         Map<String, Object> orgPsnSignMap = Maps.newHashMap();
@@ -725,7 +734,7 @@ public class Create_by_fileOSFService implements IHRMsfService {
                 for (Map<String, Object> fieldMap : fieldList) {
                     Map<String, Object> field = Maps.newHashMap();
                     field.put("fileId", fieldMap.get("fileId"));
-                    field.put("customBizNum", sourceId);
+                    field.put("customBizNum", doc.get("fileName"));
                     if (0 == ((int) fieldMap.get("signFieldType"))) {
                         field.put("signFieldType", fieldMap.get("signFieldType"));
                         //签章区配置项(指定signFieldType为 0 - 签章区时,该参数为必传项)
@@ -769,14 +778,16 @@ public class Create_by_fileOSFService implements IHRMsfService {
                     }
                     signFields.add(field);
                 }
-            }else {
+            } else {
+                Map<String, Object> res = Maps.newHashMap();
                 //失败
-                resul.put("文件模板:"+doc.get("fileName"),signName+",未匹配到签署区,请检查模板的签署区命名规范。签署区命名规则:如(“甲方:(盖章)_签署方1_X50_Y50“)根据“_”分割字符串,第一个是要盖章的内容位置标识;第二个是签署方用来判断这个签署区是谁的;X50表示:印章位置向右移动50;Y50表示:印章位置向上移动50");
-
-                resul.put("data",signListGroup);
-                throw new EsignException(JSON.toJSONString(resul));
+                res.put("文件模板:"+doc.get("fileName"),signName+",未匹配到签署区,请检查模板的签署区命名规范。签署区命名规则:如(“甲方:(盖章)_签署方1_X50_Y50“)根据“_”分割字符串,第一个是要盖章的内容位置标识;第二个是签署方用来判断这个签署区是谁的;X50表示:印章位置向右移动50;Y50表示:印章位置向上移动50");
+                resulList.add(res);
             }
         }
+        if(signFields.size()<=0) {
+            throw new EsignException(JSON.toJSONString(resulList));
+        }
         signMapInfo.put("signFields", signFields);
         signMapInfo.put("signerType", 0);