9060 4 ay önce
ebeveyn
işleme
ef4a083136

+ 68 - 4
js/addon/custom/js/eSign/ESignGlobalStatusOverviewList.js

@@ -44,15 +44,79 @@ shr.defineClass("shr.esign.ESignGlobalStatusOverviewList", shr.framework.List, {
     /**
      *  审批
      */
-    enableAction: function () {
+    previewAction: function () {
         var _self = this;
-        var parentVal = this.getUrlParam('rowid');
+
         var selectedIds = this.getSelectedIds();
 
         _self.doRemoteWithBatchAction({
-            method: 'disable',
+            method: 'preview',
             billId: selectedIds,
-            rowid:parentVal
+            success:function (response){
+                _self.reloadPage({
+                    uipk: "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.view",
+                    billId: selectedIds,
+                    method: 'view'
+                });
+            }
+        });
+    },
+    /**
+     * 执行远程服务端方法,适用于有批量操作的远程调用
+     */
+    doRemoteWithBatchAction: function (param) {
+        var _self = this;
+        var data = param;
+        data = $.extend(_self.prepareParam(), data);
+        data = $.extend({ permItemId: shr.getCurrentPagePermItemId() }, data);
+        var func = data.func;
+        var success = param.success;
+        delete data.func;
+        shr.doWithBatchAction({
+            url: _self.dynamicPage_url,
+            type: 'post',
+            data: data,
+            success: function (response) {
+                if (response) {
+                    if (func && typeof func === "function") {
+                        func(response);
+                    }
+
+                    if (success && typeof success === "function") {
+                        return success(response);
+                    }
+                    var batchTipsData = _self.batchTipsDataHandler(response, data);
+
+                    $(_self).shrMessageTips({
+                        isSuccess: batchTipsData.isSuccess,
+                        successCount: batchTipsData.successCount,
+                        failureCount: batchTipsData.failureCount,
+                        confirmCallback: function () {
+                            $(_self).shrDetailTips({
+                                tableData: batchTipsData.tmp,
+                                successCount: batchTipsData.successCount,
+                                failureCount: batchTipsData.failureCount,
+                                colNamesData: batchTipsData.tableModel,
+                                isSortable: _self.batchHandlerWhetherSortable(),
+                                modalWidth: param.modalWidth || ''
+                            }).shrDetailTips("open");
+                        },
+
+                        closeCallback: function () {
+                            // 这里需要存一下是否全部成功的标识
+                            sessionStorage.setItem('deleteSuccess', batchTipsData.failureCount ? 0 : 1);
+                            _self.reloadGrid();
+                        }
+                    }).shrMessageTips("open");
+                } else {
+                    $(_self).shrMessageTips("_setDetailDisable");
+                }
+            },
+            error: function (response) {
+                if (param.billId && param.billId.split(',').length > 1) {
+                    _self.reloadGrid();
+                }
+            }
         });
     },
 })

+ 3 - 3
metadata/com/kingdee/eas/custom/esign/ESignGlobalStatusOverview.bizunit

@@ -96,9 +96,9 @@
             <lang locale="zh_TW" value="com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewListUI" />
         </rs>
         <rs key="bizUnit[com.kingdee.eas.custom.esign.ESignGlobalStatusOverview].extendedProperty.maxFieldIndex">
-            <lang locale="en_US" value="9" />
-            <lang locale="zh_CN" value="9" />
-            <lang locale="zh_TW" value="9" />
+            <lang locale="en_US" value="11" />
+            <lang locale="zh_CN" value="11" />
+            <lang locale="zh_TW" value="11" />
         </rs>
         <rs key="bizUnit[com.kingdee.eas.custom.esign.ESignGlobalStatusOverview].extendedProperty.userDefined">
             <lang locale="en_US" value="true" />

+ 52 - 0
metadata/com/kingdee/eas/custom/esign/app/CT_ESI_ESGSO.table

@@ -343,6 +343,34 @@
             <scale>0</scale>
             <precision>0</precision>
         </column>
+        <column>
+            <name>CFEfileId</name>
+            <alias>dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEfileId].alias</alias>
+            <description>dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEfileId].description</description>
+            <userDefined>true</userDefined>
+            <isMultilingual>false</isMultilingual>
+            <isEncoded>false</isEncoded>
+            <isNullable>true</isNullable>
+            <defaultValue />
+            <sqlType>NVARCHAR</sqlType>
+            <length>200</length>
+            <scale>0</scale>
+            <precision>0</precision>
+        </column>
+        <column>
+            <name>CFEsignName</name>
+            <alias>dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEsignName].alias</alias>
+            <description>dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEsignName].description</description>
+            <userDefined>true</userDefined>
+            <isMultilingual>false</isMultilingual>
+            <isEncoded>false</isEncoded>
+            <isNullable>true</isNullable>
+            <defaultValue />
+            <sqlType>VARCHAR</sqlType>
+            <length>100</length>
+            <scale>0</scale>
+            <precision>0</precision>
+        </column>
     </columns>
     <primaryKey>
         <name>CPK_ESI_ESGSOIDiee</name>
@@ -511,6 +539,18 @@
             <lang locale="zh_HK" value="API流水號" />
             <lang locale="zh_TW" value="API流水號" />
         </rs>
+        <rs key="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEfileId].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEfileId].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
         <rs key="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFErrorMsg].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="错误信息" />
@@ -523,6 +563,18 @@
             <lang locale="zh_HK" value="錯誤信息" />
             <lang locale="zh_TW" value="錯誤信息" />
         </rs>
+        <rs key="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEsignName].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="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEsignName].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="接口名称" />
+            <lang locale="zh_HK" value="介面名稱" />
+            <lang locale="zh_TW" value="介面名稱" />
+        </rs>
         <rs key="dataTable[com.kingdee.eas.custom.esign.app.CT_ESI_ESGSO].columns.column[CFEsignStatus].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="e签发状态" />

+ 171 - 0
metadata/com/kingdee/eas/custom/esign/app/ESignGlobalStatusOverview.entity

@@ -366,6 +366,46 @@
                 <key name="name" value="CFFileName" />
             </mappingField>
         </ownProperty>
+        <ownProperty>
+            <name>efileId</name>
+            <alias>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].alias</alias>
+            <description>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].description</description>
+            <userDefined>true</userDefined>
+            <configured>false</configured>
+            <dataType>String</dataType>
+            <metadataRef />
+            <isMultilingual>false</isMultilingual>
+            <isNullable>false</isNullable>
+            <formula />
+            <length>200</length>
+            <precision>0</precision>
+            <decimalDigits>0</decimalDigits>
+            <defaultValue>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].defaultValue</defaultValue>
+            <displayFormat />
+            <mappingField>
+                <key name="name" value="CFEfileId" />
+            </mappingField>
+        </ownProperty>
+        <ownProperty>
+            <name>esignName</name>
+            <alias>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].alias</alias>
+            <description>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].description</description>
+            <userDefined>true</userDefined>
+            <configured>false</configured>
+            <dataType>Enum</dataType>
+            <metadataRef>com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum</metadataRef>
+            <isMultilingual>false</isMultilingual>
+            <isNullable>false</isNullable>
+            <formula />
+            <length>80</length>
+            <precision>0</precision>
+            <decimalDigits>0</decimalDigits>
+            <defaultValue>entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].defaultValue</defaultValue>
+            <displayFormat />
+            <mappingField>
+                <key name="name" value="CFEsignName" />
+            </mappingField>
+        </ownProperty>
     </properties>
     <logicalKey>
         <name>id</name>
@@ -1214,6 +1254,69 @@
             <lang locale="zh_CN" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].defaultValue">
+            <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="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.ColWidthInKDTable">
+            <lang locale="en_US" value="50" />
+            <lang locale="zh_CN" value="50" />
+            <lang locale="zh_TW" value="50" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.bizDataType">
+            <lang locale="en_US" value="STRING" />
+            <lang locale="zh_CN" value="STRING" />
+            <lang locale="zh_TW" value="STRING" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.enableFieldPermission">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isForGrouping">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isForMapping">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isForMatching">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isForWrittenBack">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isInCode">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[efileId].extendedProperty.isVisibleForKDTable">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[errorMsg].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="错误信息" />
@@ -1277,6 +1380,74 @@
             <lang locale="zh_CN" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].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="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].defaultValue">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="EsignAppId" />
+            <lang locale="zh_HK" value="EsignAppId" />
+            <lang locale="zh_TW" value="EsignAppId" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="接口名称" />
+            <lang locale="zh_HK" value="介面名稱" />
+            <lang locale="zh_TW" value="介面名稱" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.ColWidthInKDTable">
+            <lang locale="en_US" value="50" />
+            <lang locale="zh_CN" value="50" />
+            <lang locale="zh_TW" value="50" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.bizDataType">
+            <lang locale="en_US" value="ENUM" />
+            <lang locale="zh_CN" value="ENUM" />
+            <lang locale="zh_TW" value="ENUM" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.defaultValue">
+            <lang locale="en_US" value="EsignAppId" />
+            <lang locale="zh_CN" value="EsignAppId" />
+            <lang locale="zh_TW" value="EsignAppId" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.enableFieldPermission">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isForGrouping">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isForMapping">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isForMatching">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isForWrittenBack">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isInCode">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignName].extendedProperty.isVisibleForKDTable">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview].properties.ownProperty[esignStatus].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="e签发状态" />

+ 94 - 0
metadata/com/kingdee/eas/custom/esign/app/ESignGlobalStatusOverviewQuery.query

@@ -1218,6 +1218,68 @@
                 <key name="name" value="ESignGlobalStatusOverviewQuery" />
             </query>
         </queryField>
+        <queryField>
+            <name>efileId</name>
+            <userDefined>true</userDefined>
+            <formulaString>#0</formulaString>
+            <constString />
+            <displayName>joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[efileId].displayName</displayName>
+            <groupType />
+            <isSelector>true</isSelector>
+            <isFilter>true</isFilter>
+            <isSorter>true</isSorter>
+            <isParameter>false</isParameter>
+            <returnType>String</returnType>
+            <propertyRefs>
+                <propertyRef>
+                    <key>5f68e138-ca11-4fcc-b226-8bf6d33f5ba0</key>
+                    <parentUnit>
+                        <key name="name" value="efileId" />
+                    </parentUnit>
+                    <subEntity>
+                        <key name="name" value="ESignGlobalStatusOverview" />
+                    </subEntity>
+                    <refProperty>
+                        <key name="name" value="efileId" />
+                    </refProperty>
+                </propertyRef>
+            </propertyRefs>
+            <query>
+                <key name="package" value="com.kingdee.eas.custom.esign.app" />
+                <key name="name" value="ESignGlobalStatusOverviewQuery" />
+            </query>
+        </queryField>
+        <queryField>
+            <name>esignName</name>
+            <userDefined>true</userDefined>
+            <formulaString>#0</formulaString>
+            <constString />
+            <displayName>joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[esignName].displayName</displayName>
+            <groupType />
+            <isSelector>true</isSelector>
+            <isFilter>true</isFilter>
+            <isSorter>true</isSorter>
+            <isParameter>false</isParameter>
+            <returnType>String</returnType>
+            <propertyRefs>
+                <propertyRef>
+                    <key>6bc9cebc-c80d-49f8-9e64-eba011e12b60</key>
+                    <parentUnit>
+                        <key name="name" value="esignName" />
+                    </parentUnit>
+                    <subEntity>
+                        <key name="name" value="ESignGlobalStatusOverview" />
+                    </subEntity>
+                    <refProperty>
+                        <key name="name" value="esignName" />
+                    </refProperty>
+                </propertyRef>
+            </propertyRefs>
+            <query>
+                <key name="package" value="com.kingdee.eas.custom.esign.app" />
+                <key name="name" value="ESignGlobalStatusOverviewQuery" />
+            </query>
+        </queryField>
     </units>
     <defaultFilter>
         <name>defaultFilter</name>
@@ -1690,6 +1752,22 @@
             <lang locale="zh_CN" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[efileId].displayName">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[efileId].extendedProperty.isCommonQueryFilter">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[efileId].extendedProperty.isCommonQuerySorter">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[errorMsg].displayName">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="错误信息" />
@@ -1706,6 +1784,22 @@
             <lang locale="zh_CN" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[esignName].displayName">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="接口名称" />
+            <lang locale="zh_HK" value="介面名稱" />
+            <lang locale="zh_TW" value="介面名稱" />
+        </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[esignName].extendedProperty.isCommonQueryFilter">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[esignName].extendedProperty.isCommonQuerySorter">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="joinQuery[com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverviewQuery].units.queryField[esignStatus].displayName">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="e签发状态" />

+ 60 - 0
metadata/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum.enum

@@ -110,6 +110,36 @@
             <userDefined>true</userDefined>
             <value>file_download_url</value>
         </enumValue>
+        <enumValue>
+            <name>preview_file_download_url</name>
+            <alias>bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[preview_file_download_url].alias</alias>
+            <userDefined>true</userDefined>
+            <value>preview_file_download_url</value>
+        </enumValue>
+        <enumValue>
+            <name>org_own_seal_list</name>
+            <alias>bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[org_own_seal_list].alias</alias>
+            <userDefined>true</userDefined>
+            <value>org_own_seal_list</value>
+        </enumValue>
+        <enumValue>
+            <name>getFilesState</name>
+            <alias>bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[getFilesState].alias</alias>
+            <userDefined>true</userDefined>
+            <value>getFilesState</value>
+        </enumValue>
+        <enumValue>
+            <name>shrAddr</name>
+            <alias>bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[shrAddr].alias</alias>
+            <userDefined>true</userDefined>
+            <value>shrAddr</value>
+        </enumValue>
+        <enumValue>
+            <name>notifyUrl</name>
+            <alias>bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[notifyUrl].alias</alias>
+            <userDefined>true</userDefined>
+            <value>notifyUrl</value>
+        </enumValue>
     </enumValues>
     <resource>
         <rs key="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].alias">
@@ -196,6 +226,24 @@
             <lang locale="zh_HK" value="下載已簽署文件及附屬材料" />
             <lang locale="zh_TW" value="下載已簽署文件及附屬材料" />
         </rs>
+        <rs key="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[getFilesState].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="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[notifyUrl].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="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[org_own_seal_list].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="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[organizations_identity_info].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="查询机构认证信息" />
@@ -208,12 +256,24 @@
             <lang locale="zh_HK" value="查詢個人認證信息" />
             <lang locale="zh_TW" value="查詢個人認證信息" />
         </rs>
+        <rs key="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[preview_file_download_url].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="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[revoke_by_file].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="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[shrAddr].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="shr地址" />
+            <lang locale="zh_HK" value="shr地址" />
+            <lang locale="zh_TW" value="shr地址" />
+        </rs>
         <rs key="bizEnum[com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum].enumValues.enumValue[start_by_file].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="开启签署流程" />

+ 319 - 0
metadata/com/kingdee/eas/custom/esign/client/ESignGlobalStatusOverviewEditUI.ui

@@ -864,6 +864,104 @@
                 <key name="name" value="CoreUI" />
             </parent>
         </component>
+        <component>
+            <name>contefileId</name>
+            <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].alias</alias>
+            <userDefined>true</userDefined>
+            <classType>com.kingdee.bos.ctrl.swing.KDLabelContainer</classType>
+            <isContainer>true</isContainer>
+            <constraints>0,0,270,19</constraints>
+            <tabIndex>0</tabIndex>
+            <herited>false</herited>
+            <bimUIObjectPK />
+            <layoutInfo>
+                <name />
+                <type>LabelContainerLayout</type>
+                <value />
+            </layoutInfo>
+            <properties>
+                <property>
+                    <name>boundLabelText</name>
+                    <type>java.lang.String</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelText].value</value>
+                    <isMultiLan>true</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>boundLabelLength</name>
+                    <type>int</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelLength].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>boundLabelUnderline</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelUnderline].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>visible</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[visible].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+            </properties>
+            <parent>
+                <key name="name" value="CoreUI" />
+            </parent>
+        </component>
+        <component>
+            <name>contesignName</name>
+            <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].alias</alias>
+            <userDefined>true</userDefined>
+            <classType>com.kingdee.bos.ctrl.swing.KDLabelContainer</classType>
+            <isContainer>true</isContainer>
+            <constraints>0,0,270,19</constraints>
+            <tabIndex>0</tabIndex>
+            <herited>false</herited>
+            <bimUIObjectPK />
+            <layoutInfo>
+                <name />
+                <type>LabelContainerLayout</type>
+                <value />
+            </layoutInfo>
+            <properties>
+                <property>
+                    <name>boundLabelText</name>
+                    <type>java.lang.String</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelText].value</value>
+                    <isMultiLan>true</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>boundLabelLength</name>
+                    <type>int</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelLength].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>boundLabelUnderline</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelUnderline].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>visible</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[visible].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+            </properties>
+            <parent>
+                <key name="name" value="CoreUI" />
+            </parent>
+        </component>
         <component>
             <name>prmtCreator</name>
             <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[prmtCreator].alias</alias>
@@ -1790,6 +1888,113 @@
                 </propertyBinding>
             </propertyBindings>
         </component>
+        <component>
+            <name>txtefileId</name>
+            <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].alias</alias>
+            <userDefined>true</userDefined>
+            <classType>com.kingdee.bos.ctrl.swing.KDTextField</classType>
+            <isContainer>false</isContainer>
+            <constraints>3</constraints>
+            <tabIndex>24</tabIndex>
+            <herited>false</herited>
+            <bimUIObjectPK />
+            <properties>
+                <property>
+                    <name>visible</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[visible].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>horizontalAlignment</name>
+                    <type>int</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[horizontalAlignment].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>maxLength</name>
+                    <type>int</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[maxLength].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>required</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[required].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+            </properties>
+            <parent>
+                <key name="name" value="contefileId" />
+            </parent>
+            <propertyBindings>
+                <propertyBinding>
+                    <propertyName>text</propertyName>
+                    <propertyType>java.lang.String</propertyType>
+                    <bindingObject>editData</bindingObject>
+                    <bindingField>efileId</bindingField>
+                    <fieldType>String</fieldType>
+                    <accessType>2</accessType>
+                    <autoMode>false</autoMode>
+                    <herited>false</herited>
+                    <userDefined>true</userDefined>
+                </propertyBinding>
+            </propertyBindings>
+        </component>
+        <component>
+            <name>esignName</name>
+            <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].alias</alias>
+            <userDefined>true</userDefined>
+            <classType>com.kingdee.bos.ctrl.swing.KDComboBox</classType>
+            <isContainer>false</isContainer>
+            <constraints>7</constraints>
+            <tabIndex>25</tabIndex>
+            <herited>false</herited>
+            <bimUIObjectPK />
+            <properties>
+                <property>
+                    <name>visible</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[visible].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>items</name>
+                    <type>java.lang.String</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[items].value</value>
+                    <isMultiLan>true</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+                <property>
+                    <name>required</name>
+                    <type>boolean</type>
+                    <value>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[required].value</value>
+                    <isMultiLan>false</isMultiLan>
+                    <userDefined>true</userDefined>
+                </property>
+            </properties>
+            <parent>
+                <key name="name" value="contesignName" />
+            </parent>
+            <propertyBindings>
+                <propertyBinding>
+                    <propertyName>selectedItem</propertyName>
+                    <propertyType>java.lang.Object</propertyType>
+                    <bindingObject>editData</bindingObject>
+                    <bindingField>esignName</bindingField>
+                    <fieldType>com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum</fieldType>
+                    <accessType>2</accessType>
+                    <autoMode>false</autoMode>
+                    <herited>false</herited>
+                    <userDefined>true</userDefined>
+                </propertyBinding>
+            </propertyBindings>
+        </component>
         <component>
             <name>btnTraceUp</name>
             <alias>uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[btnTraceUp].alias</alias>
@@ -2779,6 +2984,36 @@
             <lang locale="zh_HK" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].alias">
+            <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="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelLength].value">
+            <lang locale="en_US" value="100" />
+            <lang locale="zh_CN" value="100" />
+            <lang locale="zh_HK" value="100" />
+            <lang locale="zh_TW" value="100" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelText].value">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[boundLabelUnderline].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contefileId].properties.property[visible].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[conterrorMsg].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="null" />
@@ -2809,6 +3044,36 @@
             <lang locale="zh_HK" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].alias">
+            <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="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelLength].value">
+            <lang locale="en_US" value="100" />
+            <lang locale="zh_CN" value="100" />
+            <lang locale="zh_HK" value="100" />
+            <lang locale="zh_TW" value="100" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelText].value">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="接口名称" />
+            <lang locale="zh_HK" value="介面名稱" />
+            <lang locale="zh_TW" value="介面名稱" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[boundLabelUnderline].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignName].properties.property[visible].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[contesignStatus].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="null" />
@@ -3019,6 +3284,30 @@
             <lang locale="zh_HK" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].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="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[items].value">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="[Enum]com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum" />
+            <lang locale="zh_HK" value="[Enum]com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum" />
+            <lang locale="zh_TW" value="[Enum]com.kingdee.eas.custom.esign.bizEnum.EsignConfigEnum" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[required].value">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_HK" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignName].properties.property[visible].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[esignStatus].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="e签发状态" />
@@ -3481,6 +3770,36 @@
             <lang locale="zh_HK" value="true" />
             <lang locale="zh_TW" value="true" />
         </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="发起单据id" />
+            <lang locale="zh_HK" value="發起單據id" />
+            <lang locale="zh_TW" value="發起單據id" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[horizontalAlignment].value">
+            <lang locale="en_US" value="2" />
+            <lang locale="zh_CN" value="2" />
+            <lang locale="zh_HK" value="2" />
+            <lang locale="zh_TW" value="2" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[maxLength].value">
+            <lang locale="en_US" value="200" />
+            <lang locale="zh_CN" value="200" />
+            <lang locale="zh_HK" value="200" />
+            <lang locale="zh_TW" value="200" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[required].value">
+            <lang locale="en_US" value="false" />
+            <lang locale="zh_CN" value="false" />
+            <lang locale="zh_HK" value="false" />
+            <lang locale="zh_TW" value="false" />
+        </rs>
+        <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txtefileId].properties.property[visible].value">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_HK" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
         <rs key="uiObject[com.kingdee.eas.custom.esign.client.ESignGlobalStatusOverviewEditUI].components.component[txterrorMsg].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="错误信息" />

Dosya farkı çok büyük olduğundan ihmal edildi
+ 22 - 0
metadata/com/kingdee/eas/custom/esign/client/ESignGlobalStatusOverviewListUI.ui


+ 9 - 1
properties/esign/esignConfig.properties

@@ -1,3 +1,5 @@
+shrAddr=http://172.16.105.191:8080/shr
+notifyUrl=http://172.16.105.191:8080/callback/callBackToOSF
 #应用ID
 EsignAppId=7439075213
 #应用密钥
@@ -35,4 +37,10 @@ revoke_by_file=/v3/sign-flow/{0}/revoke
 #催签流程中签署人
 urge_by_file=/v3/sign-flow/{0}/urge
 #下载已签署文件及附属材料
-file_download_url=/v3/sign-flow/{0}/file-download-url
+file_download_url=/v3/sign-flow/{0}/file-download-url
+#下载已签署文件及附属材料
+preview_file_download_url=/v3/sign-flow/{0}/preview-file-download-url
+#查询企业内部印章
+org_own_seal_list=/v3/seals/org-own-seal-list
+#
+getFilesState=/v3/files/{0}

+ 10 - 0
src/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum.java

@@ -30,6 +30,11 @@ public class EsignConfigEnum extends StringEnum
     public static final String REVOKE_BY_FILE_VALUE = "revoke_by_file";//alias=撤回签署流程
     public static final String URGE_BY_FILE_VALUE = "urge_by_file";//alias=催签流程中签署人
     public static final String FILE_DOWNLOAD_URL_VALUE = "file_download_url";//alias=下载已签署文件及附属材料
+    public static final String PREVIEW_FILE_DOWNLOAD_URL_VALUE = "preview_file_download_url";//alias=下载签署中文件
+    public static final String ORG_OWN_SEAL_LIST_VALUE = "org_own_seal_list";//alias=查询企业内部印章
+    public static final String GETFILESSTATE_VALUE = "getFilesState";//alias=获取文件上传状态
+    public static final String SHRADDR_VALUE = "shrAddr";//alias=shr地址
+    public static final String NOTIFYURL_VALUE = "notifyUrl";//alias=回调地址
 
     public static final EsignConfigEnum EsignAppId = new EsignConfigEnum("EsignAppId", ESIGNAPPID_VALUE);
     public static final EsignConfigEnum EsignAppSecret = new EsignConfigEnum("EsignAppSecret", ESIGNAPPSECRET_VALUE);
@@ -48,6 +53,11 @@ public class EsignConfigEnum extends StringEnum
     public static final EsignConfigEnum revoke_by_file = new EsignConfigEnum("revoke_by_file", REVOKE_BY_FILE_VALUE);
     public static final EsignConfigEnum urge_by_file = new EsignConfigEnum("urge_by_file", URGE_BY_FILE_VALUE);
     public static final EsignConfigEnum file_download_url = new EsignConfigEnum("file_download_url", FILE_DOWNLOAD_URL_VALUE);
+    public static final EsignConfigEnum preview_file_download_url = new EsignConfigEnum("preview_file_download_url", PREVIEW_FILE_DOWNLOAD_URL_VALUE);
+    public static final EsignConfigEnum org_own_seal_list = new EsignConfigEnum("org_own_seal_list", ORG_OWN_SEAL_LIST_VALUE);
+    public static final EsignConfigEnum getFilesState = new EsignConfigEnum("getFilesState", GETFILESSTATE_VALUE);
+    public static final EsignConfigEnum shrAddr = new EsignConfigEnum("shrAddr", SHRADDR_VALUE);
+    public static final EsignConfigEnum notifyUrl = new EsignConfigEnum("notifyUrl", NOTIFYURL_VALUE);
 
     /**
      * construct function

+ 5 - 0
src/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum.properties

@@ -15,3 +15,8 @@ start_by_file=\u5F00\u542F\u7B7E\u7F72\u6D41\u7A0B
 revoke_by_file=\u64A4\u56DE\u7B7E\u7F72\u6D41\u7A0B
 urge_by_file=\u50AC\u7B7E\u6D41\u7A0B\u4E2D\u7B7E\u7F72\u4EBA
 file_download_url=\u4E0B\u8F7D\u5DF2\u7B7E\u7F72\u6587\u4EF6\u53CA\u9644\u5C5E\u6750\u6599
+preview_file_download_url=\u4E0B\u8F7D\u7B7E\u7F72\u4E2D\u6587\u4EF6
+org_own_seal_list=\u67E5\u8BE2\u4F01\u4E1A\u5185\u90E8\u5370\u7AE0
+getFilesState=\u83B7\u53D6\u6587\u4EF6\u4E0A\u4F20\u72B6\u6001
+shrAddr=shr\u5730\u5740
+notifyUrl=\u56DE\u8C03\u5730\u5740

+ 5 - 0
src/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum_l1.properties

@@ -15,3 +15,8 @@ start_by_file=
 revoke_by_file=
 urge_by_file=
 file_download_url=
+preview_file_download_url=
+org_own_seal_list=
+getFilesState=
+shrAddr=
+notifyUrl=

+ 5 - 0
src/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum_l2.properties

@@ -15,3 +15,8 @@ start_by_file=\u5F00\u542F\u7B7E\u7F72\u6D41\u7A0B
 revoke_by_file=\u64A4\u56DE\u7B7E\u7F72\u6D41\u7A0B
 urge_by_file=\u50AC\u7B7E\u6D41\u7A0B\u4E2D\u7B7E\u7F72\u4EBA
 file_download_url=\u4E0B\u8F7D\u5DF2\u7B7E\u7F72\u6587\u4EF6\u53CA\u9644\u5C5E\u6750\u6599
+preview_file_download_url=\u4E0B\u8F7D\u7B7E\u7F72\u4E2D\u6587\u4EF6
+org_own_seal_list=\u67E5\u8BE2\u4F01\u4E1A\u5185\u90E8\u5370\u7AE0
+getFilesState=\u83B7\u53D6\u6587\u4EF6\u4E0A\u4F20\u72B6\u6001
+shrAddr=shr\u5730\u5740
+notifyUrl=\u56DE\u8C03\u5730\u5740

+ 5 - 0
src/com/kingdee/eas/custom/esign/bizEnum/EsignConfigEnum_l3.properties

@@ -15,3 +15,8 @@ start_by_file=\u958B\u555F\u7C3D\u7F72\u6D41\u7A0B
 revoke_by_file=\u64A4\u56DE\u7C3D\u7F72\u6D41\u7A0B
 urge_by_file=\u50AC\u7C3D\u6D41\u7A0B\u4E2D\u7C3D\u7F72\u4EBA
 file_download_url=\u4E0B\u8F09\u5DF2\u7C3D\u7F72\u6587\u4EF6\u53CA\u9644\u5C6C\u6750\u6599
+preview_file_download_url=\u4E0B\u8F09\u7C3D\u7F72\u4E2D\u6587\u4EF6
+org_own_seal_list=\u67E5\u8A62\u4F01\u696D\u5167\u90E8\u5370\u7AE0
+getFilesState=\u7372\u53D6\u6587\u4EF6\u4E0A\u50B3\u72C0\u614B
+shrAddr=shr\u5730\u5740
+notifyUrl=\u56DE\u8ABF\u5730\u5740

+ 272 - 147
src/com/kingdee/eas/custom/esign/util/EsignHttpUtil.java

@@ -50,18 +50,18 @@ public class EsignHttpUtil {
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse doCommHttp(Context ctx,String url, String jsonParm, EsignRequestType requestType, Boolean debug,String sourceId,EsignConfigEnum configEnum) throws EsignException {
-        EsignLogInfo esignLogInfo =new EsignLogInfo();
+    public static EsignHttpResponse doCommHttp(Context ctx, String url, String jsonParm, EsignRequestType requestType, Boolean debug, String sourceId, EsignConfigEnum configEnum) throws EsignException {
+        EsignLogInfo esignLogInfo = new EsignLogInfo();
         //
         //生成签名鉴权方式的的header
         Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(EsignConfig.getInstance().getEsignAppId(),
                 EsignConfig.getInstance().getEsignAppSecret(), jsonParm, requestType.name(), url, debug);
         EsignHttpResponse response = EsignHttpHelper.doCommHttp(EsignConfig.getInstance().getEsignHost(), url, requestType, jsonParm, header, debug);
-        try{
-            if(null==ctx){
-                 ctx = ContextUtils.getContextFromSession();
+        try {
+            if (null == ctx) {
+                ctx = ContextUtils.getContextFromSession();
             }
-            if(null==ctx) {
+            if (null == ctx) {
                 String currentSolutionName = EASConfig.getInstance().getSlnName();
                 String currentDatabaseCenter = EASConfig.getInstance().getDcCode();
                 ctx = new Context(new ObjectUuidPK(), currentSolutionName, currentDatabaseCenter, new Locale("l2"));
@@ -75,9 +75,9 @@ public class EsignHttpUtil {
             esignLogInfo.setSource(sourceId);
             IObjectPK pk = log.addnew(esignLogInfo);
             response.setLogId(pk.toString());
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
-        }finally {
+        } finally {
         }
         //发起接口请求
         return response;
@@ -89,18 +89,18 @@ public class EsignHttpUtil {
      * @param url      请求地址
      * @param jsonParm JSON字符串参数
      * @param debug    输出日志
-     * @param sourceId    来源id
+     * @param sourceId 来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse POST(Context ctx,String url, String jsonParm, Boolean debug,String sourceId,EsignConfigEnum configEnum) throws EsignException {
+    public static EsignHttpResponse POST(Context ctx, String url, String jsonParm, Boolean debug, String sourceId, EsignConfigEnum configEnum) throws EsignException {
         //请求方法
         EsignRequestType requestType = EsignRequestType.POST;
-        return doCommHttp(ctx,url, jsonParm, requestType, debug, sourceId, configEnum);
+        return doCommHttp(ctx, url, jsonParm, requestType, debug, sourceId, configEnum);
     }
 
-    public static EsignHttpResponse POST(Context ctx,String url, String jsonParm,String sourceId,EsignConfigEnum configEnum) throws EsignException {
-        return POST( ctx,url, jsonParm, false, sourceId, configEnum);
+    public static EsignHttpResponse POST(Context ctx, String url, String jsonParm, String sourceId, EsignConfigEnum configEnum) throws EsignException {
+        return POST(ctx, url, jsonParm, false, sourceId, configEnum);
     }
 
     /**
@@ -109,48 +109,52 @@ public class EsignHttpUtil {
      * @param url      请求地址
      * @param jsonParm JSON字符串参数
      * @param debug    输出日志
-     * @param sourceId    来源id
+     * @param sourceId 来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse GET(Context ctx,String url, String jsonParm, Boolean debug,String sourceId,EsignConfigEnum configEnum) throws EsignException {
+    public static EsignHttpResponse GET(Context ctx, String url, String jsonParm, Boolean debug, String sourceId, EsignConfigEnum configEnum) throws EsignException {
         //请求方法
         EsignRequestType requestType = EsignRequestType.GET;
-        return doCommHttp(ctx,url, jsonParm, requestType, debug, sourceId, configEnum);
+        return doCommHttp(ctx, url, jsonParm, requestType, debug, sourceId, configEnum);
     }
 
-    public static EsignHttpResponse GET(Context ctx,String url, String jsonParm,String sourceId,EsignConfigEnum configEnum) throws EsignException {
-        return GET(ctx,url, jsonParm, false, sourceId, configEnum);
+    public static EsignHttpResponse GET(Context ctx, String url, String jsonParm, String sourceId, EsignConfigEnum configEnum) throws EsignException {
+        return GET(ctx, url, jsonParm, false, sourceId, configEnum);
     }
-    public static EsignHttpResponse DELETE(Context ctx,String url, String jsonParm,String sourceId,EsignConfigEnum configEnum) throws EsignException {
-        return DELETE( ctx,url, jsonParm, false, sourceId, configEnum);
+
+    public static EsignHttpResponse DELETE(Context ctx, String url, String jsonParm, String sourceId, EsignConfigEnum configEnum) throws EsignException {
+        return DELETE(ctx, url, jsonParm, false, sourceId, configEnum);
     }
-    public static EsignHttpResponse DELETE(Context ctx,String url, String jsonParm, Boolean debug,String sourceId,EsignConfigEnum configEnum) throws EsignException {
+
+    public static EsignHttpResponse DELETE(Context ctx, String url, String jsonParm, Boolean debug, String sourceId, EsignConfigEnum configEnum) throws EsignException {
         //请求方法
         EsignRequestType requestType = EsignRequestType.DELETE;
-        return doCommHttp(ctx,url, jsonParm, requestType, debug, sourceId, configEnum);
+        return doCommHttp(ctx, url, jsonParm, requestType, debug, sourceId, configEnum);
     }
 
-    public static EsignHttpResponse getDocTemplatesDetailById(Context ctx,String id) throws EsignException {
+    public static EsignHttpResponse getDocTemplatesDetailById(Context ctx, String id) throws EsignException {
 
-        return getDocTemplatesDetailById(ctx,id, null);
+        return getDocTemplatesDetailById(ctx, id, null);
     }
+
     /**
      * 查询合同模板中控件详情
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/aoq509
      * 接口地址:https://{host}/v3/doc-templates/{docTemplateId}
      * 请求方法:GET
-     * @param id    模板id
-     * @param sourceId    来源id
+     *
+     * @param id       模板id
+     * @param sourceId 来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse getDocTemplatesDetailById(Context ctx,String id,String sourceId) throws EsignException {
-        EsignConfigEnum configEnum=EsignConfigEnum.docTemplatesDetailById;
+    public static EsignHttpResponse getDocTemplatesDetailById(Context ctx, String id, String sourceId) throws EsignException {
+        EsignConfigEnum configEnum = EsignConfigEnum.docTemplatesDetailById;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, id);
         String jsonParm = null;
-        return GET( ctx,apiaddr, jsonParm, sourceId,configEnum);
+        return GET(ctx, apiaddr, jsonParm, sourceId, configEnum);
     }
 
     /**
@@ -159,20 +163,19 @@ public class EsignHttpUtil {
      * 接口地址:https://{host}/v3/files/create-by-doc-template
      * 请求方法:POST
      * 注意事项:componentId与componentKey两个字段不能同时传值,只能一个有值
-     * @param json
-     * @param sourceId    来源id
      *
+     * @param json
+     * @param sourceId 来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse createByDocTemplate(Context ctx,String json,String sourceId) throws EsignException {
+    public static EsignHttpResponse createByDocTemplate(Context ctx, String json, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.createByDocTemplate;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
 
 
-
     /**
      * 查询机构认证信息
      * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc
@@ -187,17 +190,17 @@ public class EsignHttpUtil {
      * @param orgIDCardNum
      * @param orgIDCardType 组织机构证件类型(传orgIDCardNum时,该参数为必传)
      *                      CRED_ORG_USCC - 统一社会信用代码     *                      CRED_ORG_REGCODE - 工商注册号
-     * @param sourceId    来源id
+     * @param sourceId      来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse getOrgIdentity_info(Context ctx,String orgId, String orgName,String orgIDCardNum,String orgIDCardType,String sourceId) throws EsignException, URISyntaxException {
-        EsignConfigEnum configEnum=EsignConfigEnum.organizations_identity_info;
+    public static EsignHttpResponse getOrgIdentity_info(Context ctx, String orgId, String orgName, String orgIDCardNum, String orgIDCardType, String sourceId) throws EsignException, URISyntaxException {
+        EsignConfigEnum configEnum = EsignConfigEnum.organizations_identity_info;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
-        if (StringUtils.isBlank(orgId)&&StringUtils.isBlank(orgName)) {
-            if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isBlank(orgIDCardType)) {
+        if (StringUtils.isBlank(orgId) && StringUtils.isBlank(orgName)) {
+            if (StringUtils.isNotBlank(orgIDCardNum) && StringUtils.isBlank(orgIDCardType)) {
                 throw new EsignException("传orgIDCardNum时,orgIDCardType参数为必传");
-            }else {
+            } else {
                 throw new EsignException("orgId与orgName与orgIDCardNum不能都为空");
             }
         }
@@ -208,23 +211,27 @@ public class EsignHttpUtil {
         if (StringUtils.isNotBlank(orgName)) {
             uriBuilder.addParameter("orgName", orgName);
         }
-        if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isNotBlank(orgIDCardType)) {
+        if (StringUtils.isNotBlank(orgIDCardNum) && StringUtils.isNotBlank(orgIDCardType)) {
             uriBuilder.addParameter("orgIDCardNum", orgIDCardNum);
             uriBuilder.addParameter("orgIDCardType", orgIDCardType);
         }
         URI uri = uriBuilder.build(); // 自动编码
         apiaddr = uri.toString();
-        return GET( ctx,apiaddr, null, sourceId,configEnum);
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
     }
-    public static EsignHttpResponse getOrgIdentity_infoByOrgId(Context ctx,String orgId) throws EsignException, URISyntaxException {
-        return getOrgIdentity_info( ctx,orgId, null, null, null, null);
+
+    public static EsignHttpResponse getOrgIdentity_infoByOrgId(Context ctx, String orgId) throws EsignException, URISyntaxException {
+        return getOrgIdentity_info(ctx, orgId, null, null, null, null);
     }
-    public static EsignHttpResponse getOrgIdentity_infoByOrgName(Context ctx,String orgName) throws EsignException, URISyntaxException {
-        return getOrgIdentity_info( ctx,null, orgName, null, null, null);
+
+    public static EsignHttpResponse getOrgIdentity_infoByOrgName(Context ctx, String orgName) throws EsignException, URISyntaxException {
+        return getOrgIdentity_info(ctx, null, orgName, null, null, null);
     }
-    public static EsignHttpResponse getOrgIdentity_infoByOrgIDCardNum(Context ctx,String orgIDCardNum,String orgIDCardType) throws EsignException, URISyntaxException {
-        return getOrgIdentity_info( ctx,null, null, orgIDCardNum, orgIDCardType, null);
+
+    public static EsignHttpResponse getOrgIdentity_infoByOrgIDCardNum(Context ctx, String orgIDCardNum, String orgIDCardType) throws EsignException, URISyntaxException {
+        return getOrgIdentity_info(ctx, null, null, orgIDCardNum, orgIDCardType, null);
     }
+
     /**
      * 查询个人认证信息
      * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc
@@ -233,26 +240,27 @@ public class EsignHttpUtil {
      * 注意事项:
      * 入参中psnId、psnAccount和psnIDCardNum三个参数只选择一个传入即可查询个人的认证信息。
      * 查询优先级为 psnId > psnAccount > psnIDCardNum
+     *
      * @param psnId
      * @param psnAccount
      * @param psnIDCardNum
      * @param psnIDCardType 个人证件号类型 (传psnIDCardNum时,证件类型为必传项)
-     *                CRED_PSN_CH_IDCARD - 中国大陆居民身份证
-     *                CRED_PSN_CH_HONGKONG - 香港来往大陆通行证
-     *                CRED_PSN_CH_MACAO - 澳门来往大陆通行证
-     *                CRED_PSN_CH_TWCARD - 台湾来往大陆通行证
-     *                CRED_PSN_PASSPORT - 护照
-     * @param sourceId    来源id
+     *                      CRED_PSN_CH_IDCARD - 中国大陆居民身份证
+     *                      CRED_PSN_CH_HONGKONG - 香港来往大陆通行证
+     *                      CRED_PSN_CH_MACAO - 澳门来往大陆通行证
+     *                      CRED_PSN_CH_TWCARD - 台湾来往大陆通行证
+     *                      CRED_PSN_PASSPORT - 护照
+     * @param sourceId      来源id
      * @return
      * @throws EsignException
      */
-    public static EsignHttpResponse getPersonIdentity_info(Context ctx,String psnId, String psnAccount,String psnIDCardNum,String psnIDCardType,String sourceId) throws EsignException, URISyntaxException {
+    public static EsignHttpResponse getPersonIdentity_info(Context ctx, String psnId, String psnAccount, String psnIDCardNum, String psnIDCardType, String sourceId) throws EsignException, URISyntaxException {
         EsignConfigEnum configEnum = EsignConfigEnum.persons_identity_info;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
-        if (StringUtils.isBlank(psnId)&&StringUtils.isBlank(psnAccount)) {
-            if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isBlank(psnIDCardType)) {
+        if (StringUtils.isBlank(psnId) && StringUtils.isBlank(psnAccount)) {
+            if (StringUtils.isNotBlank(psnIDCardNum) && StringUtils.isBlank(psnIDCardType)) {
                 throw new EsignException("传orgIDCardNum时,psnIDCardType参数为必传");
-            }else {
+            } else {
                 throw new EsignException("orgId与orgName与orgIDCardNum不能都为空");
             }
         }
@@ -263,42 +271,49 @@ public class EsignHttpUtil {
         if (StringUtils.isNotBlank(psnAccount)) {
             uriBuilder.addParameter("psnAccount", psnAccount);
         }
-        if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isNotBlank(psnIDCardType)) {
+        if (StringUtils.isNotBlank(psnIDCardNum) && StringUtils.isNotBlank(psnIDCardType)) {
             uriBuilder.addParameter("psnIDCardNum", psnIDCardNum);
             uriBuilder.addParameter("psnIDCardType", psnIDCardType);
         }
         URI uri = uriBuilder.build(); // 自动编码
         apiaddr = uri.toString();
-        return GET( ctx,apiaddr, null, sourceId,configEnum);
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
     }
-    public static EsignHttpResponse getPersonIdentity_infoByPsnId(Context ctx,String psnId) throws EsignException, URISyntaxException {
-        return getPersonIdentity_info( ctx,psnId, null, null, null, null);
+
+    public static EsignHttpResponse getPersonIdentity_infoByPsnId(Context ctx, String psnId) throws EsignException, URISyntaxException {
+        return getPersonIdentity_info(ctx, psnId, null, null, null, null);
     }
-    public static EsignHttpResponse getPersonIdentity_infoByPsnAccount(Context ctx,String psnAccount) throws EsignException, URISyntaxException {
-        return getPersonIdentity_info( ctx,null, psnAccount, null, null, null);
+
+    public static EsignHttpResponse getPersonIdentity_infoByPsnAccount(Context ctx, String psnAccount) throws EsignException, URISyntaxException {
+        return getPersonIdentity_info(ctx, null, psnAccount, null, null, null);
     }
-    public static EsignHttpResponse getPersonIdentity_infoByOrgIDCardNum(Context ctx,String psnIDCardNum,String psnIDCardType) throws EsignException, URISyntaxException {
-        return getPersonIdentity_info( ctx,null, null, psnIDCardNum, psnIDCardType, null);
+
+    public static EsignHttpResponse getPersonIdentity_infoByOrgIDCardNum(Context ctx, String psnIDCardNum, String psnIDCardType) throws EsignException, URISyntaxException {
+        return getPersonIdentity_info(ctx, null, null, psnIDCardNum, psnIDCardType, null);
     }
+
     /**
      * 查询签署流程详情
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/xxk4q6
      * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/detail
      * 请求方法:GET
      * 注意事项:
+     *
      * @param signFlowId 签署流程ID
-     * @param sourceId    来源id
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse getSign_fields(Context ctx,String signFlowId,String sourceId) throws EsignException {
+    public static EsignHttpResponse getSign_fields(Context ctx, String signFlowId, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.detail_sign_fields;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return GET( ctx,apiaddr, null, sourceId,configEnum);
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
     }
-    public static EsignHttpResponse getSign_fields(Context ctx,String signFlowId) throws EsignException {
-        return getSign_fields( ctx,signFlowId,null);
+
+    public static EsignHttpResponse getSign_fields(Context ctx, String signFlowId) throws EsignException {
+        return getSign_fields(ctx, signFlowId, null);
     }
+
     /**
      * 追加签署区
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/ohzup7
@@ -307,16 +322,17 @@ public class EsignHttpUtil {
      * 注意事项:在追加一个签署区时,请确保流程在开启之前已添加了该签署区所在的待签署文件,参考【追加待签文件】;
      * 流程在“草稿”和“签署中”状态时,允许向流程中再追加签署区;
      * 【基于文件发起签署】时设置了自动完结(autoFinish为 true)的流程不支持再添加签署区。
+     *
      * @param signFlowId 签署流程ID
-     * @param json 添加签署方信息
-     * @param sourceId    来源id
+     * @param json       添加签署方信息
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse addSign_fields(Context ctx,String signFlowId,String json,String sourceId) throws EsignException {
-        EsignConfigEnum configEnum=EsignConfigEnum.add_sign_fields;
+    public static EsignHttpResponse addSign_fields(Context ctx, String signFlowId, String json, String sourceId) throws EsignException {
+        EsignConfigEnum configEnum = EsignConfigEnum.add_sign_fields;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
 
     /**
@@ -327,13 +343,14 @@ public class EsignHttpUtil {
      * 注意事项:在追加一个签署区时,请确保流程在开启之前已添加了该签署区所在的待签署文件,参考【追加待签文件】;
      * 流程在“草稿”和“签署中”状态时,允许向流程中再追加签署区;
      * 【基于文件发起签署】时设置了自动完结(autoFinish为 true)的流程不支持再添加签署区。
-     * @param signFlowId 签署流程ID
+     *
+     * @param signFlowId   签署流程ID
      * @param signFieldIds 添加签署方信息
-     * @param sourceId    来源id
+     * @param sourceId     来源id
      * @return
      */
-    public static EsignHttpResponse delSign_fields(Context ctx,String signFlowId,String signFieldIds,String sourceId) throws EsignException, URISyntaxException {
-        EsignConfigEnum configEnum=EsignConfigEnum.del_sign_fields;
+    public static EsignHttpResponse delSign_fields(Context ctx, String signFlowId, String signFieldIds, String sourceId) throws EsignException, URISyntaxException {
+        EsignConfigEnum configEnum = EsignConfigEnum.del_sign_fields;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
         URIBuilder uriBuilder = new URIBuilder(apiaddr);
@@ -342,7 +359,7 @@ public class EsignHttpUtil {
         }
         URI uri = uriBuilder.build(); // 自动编码
         apiaddr = uri.toString();
-        return DELETE( ctx,apiaddr, null, sourceId,configEnum);
+        return DELETE(ctx, apiaddr, null, sourceId, configEnum);
     }
 
     /**
@@ -351,41 +368,44 @@ public class EsignHttpUtil {
      * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/signers/sign-fields
      * 请求方法:POST
      * 注意事项:
-     *  “抄送方”的概念:
-     *      指不参与签署文件的机构或个人,可以进行查看签署流程中的签署文件以及附属材料等信息,当流程中的签署方全部完成签署,抄送方也会收到签署完成的通知。
-     *  接口注意事项:
-     *  自动完结的流程(autoFinish设置为true)不支持添加抄送方,否则将会报错:“自动归档流程开启后,不允许添加签署区”。
-     *  添加的抄送方不可与流程中已有的抄送方重复。。
+     * “抄送方”的概念:
+     * 指不参与签署文件的机构或个人,可以进行查看签署流程中的签署文件以及附属材料等信息,当流程中的签署方全部完成签署,抄送方也会收到签署完成的通知。
+     * 接口注意事项:
+     * 自动完结的流程(autoFinish设置为true)不支持添加抄送方,否则将会报错:“自动归档流程开启后,不允许添加签署区”。
+     * 添加的抄送方不可与流程中已有的抄送方重复。。
+     *
      * @param signFlowId 签署流程ID
-     * @param json 添加抄送方信息
-     * @param sourceId    来源id
+     * @param json       添加抄送方信息
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse addCopiers(Context ctx,String signFlowId,String json,String sourceId) throws EsignException {
+    public static EsignHttpResponse addCopiers(Context ctx, String signFlowId, String json, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.add_copiers;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
 
     /**
      * 删除抄送方信息
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/bdn9yt
      * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/copiers/delete
-     *
+     * <p>
      * 请求方法:POST
      * 注意事项:流程若已开启,将不支持再删除抄送方信息。
+     *
      * @param signFlowId 签署流程ID
-     * @param json 删除抄送方信息
-     * @param sourceId    来源id
+     * @param json       删除抄送方信息
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse delCopiers(Context ctx,String signFlowId,String json,String sourceId) throws EsignException {
+    public static EsignHttpResponse delCopiers(Context ctx, String signFlowId, String json, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.del_copiers;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
+
     /**
      * 基于文件发起签署
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/su5g42
@@ -393,39 +413,40 @@ public class EsignHttpUtil {
      * 请求方法:POST
      * 注意事项:
      * 1. 单个签署流程中对签署文件(docs)要求如下:
-     *  单个签署流程中所添加的文件个数不可超过50个。
-     *  单个文件大小不可超过50MB。
-     *  单个文件内单页大小不可超过20MB(文件内含图片时,需特别关注单页大小)。
-     *  单个签署流程中所添加的文件大小总和不可超过500MB。
+     * 单个签署流程中所添加的文件个数不可超过50个。
+     * 单个文件大小不可超过50MB。
+     * 单个文件内单页大小不可超过20MB(文件内含图片时,需特别关注单页大小)。
+     * 单个签署流程中所添加的文件大小总和不可超过500MB。
      * 2. 单个签署流程中一次性添加的签署方(signers)不要超过10个,如果超过10个后续可以用《追加签署区》接口追加,整个流程不能超过50个签署方。
      * 3. 单个签署流程中所添加的签署区(signFields)总和不要超过300个。
      * 4. 单个签署流程中对附属材料(attachments)要求如下:
-     *  单个签署流程中所添加的附件个数不可超过50个。
-     *  单个附件大小不可超过10MB。
+     * 单个签署流程中所添加的附件个数不可超过50个。
+     * 单个附件大小不可超过10MB。
      * 5. autoStart自动开启签署流程,默认值 true
-     *  true - 自动开启(发起签署流程,将直接进入“签署中”状态)
-     *  false - 非自动开启(发起“草稿”状态的签署流程,需调用【开启签署流程】接口后流程进入“签署中”状态)
-     *  补充说明: 自动开启的流程不允许再追加待签署文件,点击这里了解更多流程状态说明。
-     * @param ctx 上下文
-     * @param personId    签署员工id
-     * @param fileName    签署文件名称
-     * @param operatorId 操作人
-     * @param efileId 发起单据id
-     * @param json 签署信息
+     * true - 自动开启(发起签署流程,将直接进入“签署中”状态)
+     * false - 非自动开启(发起“草稿”状态的签署流程,需调用【开启签署流程】接口后流程进入“签署中”状态)
+     * 补充说明: 自动开启的流程不允许再追加待签署文件,点击这里了解更多流程状态说明。
      *
+     * @param ctx        上下文
+     * @param personId   签署员工id
+     * @param fileName   签署文件名称
+     * @param operatorId 操作人
+     * @param efileId    发起单据id
+     * @param json       签署信息
      * @return
      */
-    public static EsignHttpResponse create_by_file(Context ctx,String personId,String fileName,String operatorId,String efileId,
+    public static EsignHttpResponse create_by_file(Context ctx, String personId, String fileName, String operatorId, String efileId,
                                                    String json) throws BOSException {
-        EsignHttpResponse resp = create_by_file(ctx,personId,fileName,operatorId,efileId,EsignStatusEnum.SIGNING,json);
+        EsignHttpResponse resp = create_by_file(ctx, personId, fileName, operatorId, efileId, EsignStatusEnum.SIGNING, json);
         return resp;
     }
-    public static EsignHttpResponse create_by_file(Context ctx,String personId,String fileName,String operatorId,String efileId,
+
+    public static EsignHttpResponse create_by_file(Context ctx, String personId, String fileName, String operatorId, String efileId,
                                                    EsignStatusEnum esignStatus,
                                                    String json) throws BOSException {
         EsignConfigEnum configEnum = EsignConfigEnum.create_by_file;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
-        EsignHttpResponse resp=new EsignHttpResponse();
+        EsignHttpResponse resp = new EsignHttpResponse();
         resp.setStatus(500);
 
         /**
@@ -440,18 +461,18 @@ public class EsignHttpUtil {
                 String fid = rs.getString("fid");
                 info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(fid));
             }
-        }catch (SQLException | EASBizException e){
+        } catch (SQLException | EASBizException e) {
             e.printStackTrace();
         }
 
         info.setEsignStatus(esignStatus);
         info.setSendStatus(SendStatusEnum.FAILURE);
-        if(StringUtils.isNotBlank(personId)){
+        if (StringUtils.isNotBlank(personId)) {
             PersonInfo personInfo = new PersonInfo();
             personInfo.setId(BOSUuid.read(personId));
             info.setPerson(personInfo);
         }
-        if(StringUtils.isNotBlank(personId)){
+        if (StringUtils.isNotBlank(operatorId)) {
             PersonInfo operator = new PersonInfo();
             operator.setId(BOSUuid.read(operatorId));
             info.setOperator(operator);
@@ -463,65 +484,69 @@ public class EsignHttpUtil {
         info.setRequestParams(json);
         info.setEsignName(configEnum);
         try {
-            resp = POST(ctx, apiaddr, json, efileId,configEnum);
-            if(resp.getStatus()>=200&&resp.getStatus()<300) {
+            resp = POST(ctx, apiaddr, json, efileId, configEnum);
+            if (resp.getStatus() >= 200 && resp.getStatus() < 300) {
                 JSONObject object = JSON.parseObject(resp.getBody());
-                if("0".equals(String.valueOf(object.get("code")))) {
+                if ("0".equals(String.valueOf(object.get("code")))) {
                     JSONObject data = object.getJSONObject("data");
                     info.setSignFlowId(data.getString("signFlowId"));
                     info.setSendStatus(SendStatusEnum.SUCCESS);
                 }
             }
             info.setSourceBillId(resp.getLogId());
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             info.setSendStatus(SendStatusEnum.FAILURE);
-        }finally {
+        } finally {
             try {
                 globalStatusOverview.save(info);
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         return resp;
     }
+
     /**
      * 开启签署流程
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/bdn9yt
      * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/start
-     *
+     * <p>
      * 请求方法:POST
      * 注意事项:流程若已开启,将不支持再删除抄送方信息。
+     *
      * @param signFlowId 签署流程ID
-     * @param sourceId    来源id
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse start_by_file(Context ctx,String signFlowId,String sourceId) throws EsignException {
+    public static EsignHttpResponse start_by_file(Context ctx, String signFlowId, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.start_by_file;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return POST( ctx,apiaddr, null, sourceId,configEnum);
+        return POST(ctx, apiaddr, null, sourceId, configEnum);
     }
+
     /**
      * 撤销签署流程
      * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/klbicu
      * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/revoke
-     *
+     * <p>
      * 请求方法:POST
      * 注意事项:撤销签署中的流程,撤销后签署流程将终止,变为已撤销状态。
-     * @param signFlowId 签署流程ID
+     *
+     * @param signFlowId   签署流程ID
      * @param revokeReason 撤销原因 撤销原因最多50字
-     * @param sourceId    来源id
+     * @param sourceId     来源id
      * @return
      */
-    public static EsignHttpResponse revoke_by_file(Context ctx,String signFlowId,String revokeReason,String sourceId) throws EsignException {
+    public static EsignHttpResponse revoke_by_file(Context ctx, String signFlowId, String revokeReason, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.revoke_by_file;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        Map<String,String> jsonMap = Maps.newHashMap();
-        jsonMap.put("revokeReason",(StringUtils.isNotBlank(revokeReason)?revokeReason:""));
+        Map<String, String> jsonMap = Maps.newHashMap();
+        jsonMap.put("revokeReason", (StringUtils.isNotBlank(revokeReason) ? revokeReason : ""));
         String json = JSON.toJSONString(jsonMap);
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
 
     /**
@@ -532,16 +557,17 @@ public class EsignHttpUtil {
      * 【注意事项】
      * 发起签署之后的前半小时不可进行催签;
      * 与上一次催签,请至少间隔十分钟再发起下一次催签提醒。
+     *
      * @param signFlowId 签署流程ID
-     * @param json 催签的签署人信息
-     * @param sourceId    来源id
+     * @param json       催签的签署人信息
+     * @param sourceId   来源id
      * @return
      */
-    public static EsignHttpResponse urge_by_file(Context ctx,String signFlowId,String json,String sourceId) throws EsignException {
+    public static EsignHttpResponse urge_by_file(Context ctx, String signFlowId, String json, String sourceId) throws EsignException {
         EsignConfigEnum configEnum = EsignConfigEnum.urge_by_file;
         String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        return POST( ctx,apiaddr, json, sourceId,configEnum);
+        return POST(ctx, apiaddr, json, sourceId, configEnum);
     }
 
     /**
@@ -551,27 +577,126 @@ public class EsignHttpUtil {
      * 请求方法:GET
      * 【注意事项】
      * 未签署完成的流程,无法下载相关文件,否则会报错:"流程非签署完成状态,不允许下载文档"。
-     * @param signFlowId 签署流程ID
+     *
+     * @param signFlowId       签署流程ID
      * @param urlAvailableDate 下载链接有效期,单位:秒。默认:3600秒(60分钟)
-     * 可传入:1-3600
-     * 补充说明:
-     * 为链接设置有效期是一项安全措施,旨在降低因无关人员访问而导致的信息泄露风险。
-     * @param sourceId    来源id
+     *                         可传入:1-3600
+     *                         补充说明:
+     *                         为链接设置有效期是一项安全措施,旨在降低因无关人员访问而导致的信息泄露风险。
+     * @param sourceId         来源id
      * @return
      */
-    public static EsignHttpResponse getFile_download_url(Context ctx,String signFlowId,Integer urlAvailableDate,String sourceId) throws EsignException, URISyntaxException {
+    public static EsignHttpResponse getFile_download_url(Context ctx, String signFlowId, Integer urlAvailableDate, String sourceId) throws EsignException, URISyntaxException {
         EsignConfigEnum configEnum = EsignConfigEnum.file_download_url;
-        String apiaddr = EsignConfig.getInstance().get(EsignConfigEnum.FILE_DOWNLOAD_URL_VALUE);
+        String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
         apiaddr = MessageFormat.format(apiaddr, signFlowId);
-        if (null!=urlAvailableDate&&urlAvailableDate>0&&urlAvailableDate<=3600) {
+        if (null != urlAvailableDate && urlAvailableDate > 0 && urlAvailableDate <= 3600) {
             URIBuilder uriBuilder = new URIBuilder(apiaddr);
             uriBuilder.addParameter("urlAvailableDate", String.valueOf(urlAvailableDate));
             URI uri = uriBuilder.build(); // 自动编码
             apiaddr = uri.toString();
         }
-        return GET( ctx,apiaddr, null, sourceId,configEnum);
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
     }
 
+    /**
+     * 下载签署中文件
+     * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/gkgc4729sa67upfn
+     * 接口地址:https://{host}/v3/sign-flow/{signFlowId}/preview-file-download-url
+     * 请求方法:GET
+     * 【注意事项】
+     * 通过该接口可以下载流程正在签署中的文件进行预览查看,用于开发者内部系统展示合同内容。本接口下载的文件因为是过程中文件所以不支持验签和出证,并且文件中会带有“本文档仅供预览查看”的水印字样。
+     *
+     * @param signFlowId 签署流程ID
+     * @param docFileId  本次签署流程中的文件ID【注】仅支持签署文件,不支持附件
+     *                   可传入:1-3600
+     *                   补充说明:
+     *                   为链接设置有效期是一项安全措施,旨在降低因无关人员访问而导致的信息泄露风险。
+     * @param sourceId   来源id
+     * @return
+     */
+    public static EsignHttpResponse getPreview_file_download_url(Context ctx, String signFlowId, String docFileId, String sourceId) throws EsignException, URISyntaxException {
+        EsignConfigEnum configEnum = EsignConfigEnum.preview_file_download_url;
+        String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
+        apiaddr = MessageFormat.format(apiaddr, signFlowId);
+        URIBuilder uriBuilder = new URIBuilder(apiaddr);
+        uriBuilder.addParameter("docFileId", docFileId);
+        URI uri = uriBuilder.build(); // 自动编码
+        apiaddr = uri.toString();
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
+    }
 
+    /**
+     * 查询企业内部印章
+     * 参考文档:https://open.esign.cn/doc/opendoc/seal3/ups6h1
+     * 接口地址:https://{host}/v3/seals/org-own-seal-list?orgId=xx&pageNum=1&pageSize=20
+     * 请求方法:GET
+     * 【注意事项】
+     * 查询 orgId (机构企业)名下自身创建的内部自有企业印章,包括印章的编号、名称、状态、印章业务类型、印章图片下载地址等信息。
+     *
+     * @param orgId          机构账号ID 【注】用户在e签宝注册实名后才有账号ID,账号ID获取方式请使用【查询机构认证信息】接口通过组织机构名称/组织机构证件号进行查询
+     * @param pageNum        查询页码
+     * @param pageSize       每页显示的数量,最大值:20
+     * @param sealBizTypes   印章业务类型(多项可使用英文逗号分隔)
+     *                       PUBLIC - 公章
+     *                       CONTRACT - 合同专用章
+     *                       FINANCE - 财务专用章
+     *                       PERSONNEL - 人事专用章
+     *                       LEGAL_PERSON - 法定代表人章
+     *                       OMMON - 其他
+     * @param revocationSeal 是否需要查询已吊销印章,默认不查询 【注】曾经有用印记录的印章删除后即为已吊销状态
+     *                       false - 不查询已吊销印章
+     *                       ture - 查询已吊销印章
+     * @param sourceId       来源id
+     * @return
+     */
+    public static EsignHttpResponse getOrg_own_seal_list(Context ctx, String orgId,
+                                                         Integer pageNum, Integer pageSize,
+                                                         String sealBizTypes, Boolean revocationSeal,
+                                                         String sourceId
+    ) throws EsignException, URISyntaxException {
+        EsignConfigEnum configEnum = EsignConfigEnum.org_own_seal_list;
+        String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
+
+        URIBuilder uriBuilder = new URIBuilder(apiaddr);
+        uriBuilder.addParameter("orgId", orgId);
+        if(pageNum<0) {
+            uriBuilder.addParameter("pageNum", String.valueOf(1));
+        }else {
+            uriBuilder.addParameter("pageNum", String.valueOf(pageNum));
+        }
+        if(pageSize<=0) {
+            uriBuilder.addParameter("pageSize", String.valueOf(1));
+        }else if(pageSize>20){
+            uriBuilder.addParameter("pageSize", String.valueOf(20));
+        }else {
+            uriBuilder.addParameter("pageSize", String.valueOf(pageSize));
+        }
+        if(StringUtils.isNotBlank(sealBizTypes)){
+            uriBuilder.addParameter("sealBizTypes", sealBizTypes);
+        }
+        if(null!=revocationSeal){
+            uriBuilder.addParameter("revocationSeal", revocationSeal.toString());
+        }
+        URI uri = uriBuilder.build(); // 自动编码
+        apiaddr = uri.toString();
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
+    }
+    /**
+     * 查询文件上传状态
+     * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/qz4aip
+     * 接口地址:https://{host}/v3/files/{fileId}
+     * @param ctx
+     * @param fileId
+     * @param sourceId
+     * 请求方法:GET
+     */
+    public static EsignHttpResponse getFileStatus(Context ctx,String fileId, String sourceId) throws EsignException {
+        EsignConfigEnum configEnum = EsignConfigEnum.getFilesState;
+        String apiaddr = EsignConfig.getInstance().get(configEnum.getValue());
+        apiaddr = MessageFormat.format(apiaddr, fileId);
+        //发起接口请求
+        return GET(ctx, apiaddr, null, sourceId, configEnum);
+    }
 
 }

+ 391 - 75
websrc/com/kingdee/eas/custom/esign/handler/ESignGlobalStatusOverviewListHandler.java

@@ -1,31 +1,50 @@
 package com.kingdee.eas.custom.esign.handler;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
-import com.kingdee.bos.metadata.entity.SelectorItemCollection;
-import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.bos.metadata.entity.*;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.base.attachment.*;
+import com.kingdee.eas.base.attachment.common.AttachmentHelper;
 import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
 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.SendStatusEnum;
+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.DownloaderUtil;
 import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
+import com.kingdee.eas.hr.base.app.util.SHRBizBillAttachmentReverseUtils;
+import com.kingdee.shr.attachment.*;
+import com.kingdee.shr.attachment.AttachmentTypeEnum;
 import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
 import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
 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.web.handler.ListHandler;
+import com.kingdee.shr.ml.util.MutilanUtils;
+import com.kingdee.util.LocaleUtils;
+import com.kingdee.util.STConverter;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.List;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * description: ESignGlobalStatusOverviewHandler <br>
@@ -37,8 +56,10 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
     public Context getCtx() {
         return SHRContext.getInstance().getContext();
     }
+
     /**
      * 基于文件发起签署
+     *
      * @param request
      * @param response
      * @param modelMap
@@ -51,7 +72,7 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
         int failure = 0;
         int success = 0;
         try {
-            if(billId.indexOf(",")>=0){
+            if (billId.indexOf(",") >= 0) {
                 throw new EsignException("请选择一行记录发起签署");
             }
             IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx());
@@ -62,55 +83,66 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
             ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId));
             PersonInfo person = info.getPerson();
             PersonInfo operator = info.getOperator();
-            String personId=null;
-            if(null!=person&&null!=person.getId()){
-                personId=person.getId().toString();
+            String personId = null;
+            if (null != person && null != person.getId()) {
+                personId = person.getId().toString();
             }
-            String operatorId=null;
-            if(null!=operator&&null!=operator.getId()){
-                operatorId=operator.getId().toString();
+            String operatorId = null;
+            if (null != operator && null != operator.getId()) {
+                operatorId = operator.getId().toString();
             }
-            EsignHttpResponse httpRes =EsignHttpUtil.create_by_file(this.getCtx(),personId,info.getFileName(),operatorId,info.getEfileId(),
-                    info.getEsignStatus(),info.getRequestParams());
-            if(httpRes.getStatus()>=200&&httpRes.getStatus()<300) {
-                JSONObject object = JSON.parseObject(httpRes.getBody());
-                if("0".equals(String.valueOf(object.get("code")))) {
-
-                    BatchMessageTipsBody body = new BatchMessageTipsBody();
-                    body.setMuitTipsState(Boolean.TRUE);
-                    body.setMuitTipsMessage(httpRes.getBody());
-                    body.setId(billId);
-                    batchMessageTipsHeader.addResult(body);
-                    success++;
-                }else {
+            if (StringUtils.isNotBlank(info.getSignFlowId())) {
+                BatchMessageTipsBody body = new BatchMessageTipsBody();
+                body.setMuitTipsState(Boolean.FALSE);
+                body.setMuitTipsMessage("已经发起签署了,不能重复发起");
+                body.setId(billId);
+                batchMessageTipsHeader.addResult(body);
+            } else {
+                EsignHttpResponse httpRes = EsignHttpUtil.create_by_file(this.getCtx(), personId, info.getFileName(), operatorId, info.getEfileId(),
+                        EsignStatusEnum.SIGNING, info.getRequestParams());
+                if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) {
+                    JSONObject object = JSON.parseObject(httpRes.getBody());
+                    if ("0".equals(String.valueOf(object.get("code")))) {
+                        BatchMessageTipsBody body = new BatchMessageTipsBody();
+                        body.setMuitTipsState(Boolean.TRUE);
+                        body.setMuitTipsMessage(httpRes.getBody());
+                        body.setId(billId);
+                        batchMessageTipsHeader.addResult(body);
+                        success++;
+                    } else {
+                        BatchMessageTipsBody body = new BatchMessageTipsBody();
+                        body.setMuitTipsState(Boolean.FALSE);
+                        body.setMuitTipsMessage(httpRes.getBody());
+                        body.setId(billId);
+                        batchMessageTipsHeader.addResult(body);
+                    }
+                } else {
                     BatchMessageTipsBody body = new BatchMessageTipsBody();
                     body.setMuitTipsState(Boolean.FALSE);
                     body.setMuitTipsMessage(httpRes.getBody());
                     body.setId(billId);
                     batchMessageTipsHeader.addResult(body);
                 }
-            }else {
-                BatchMessageTipsBody body = new BatchMessageTipsBody();
-                body.setMuitTipsState(Boolean.FALSE);
-                body.setMuitTipsMessage(httpRes.getBody());
-                body.setId(billId);
-                batchMessageTipsHeader.addResult(body);
             }
-            batchMessageTipsHeader.setBillId(billId);
-            batchMessageTipsHeader.setFailureCount((success>0?1:0));
-            batchMessageTipsHeader.setSuccessCount(success);
-            this.writeSuccessData(batchMessageTipsHeader);
-        }catch (EsignException e){
+
+
+        } catch (EsignException e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
         }
+        batchMessageTipsHeader.setBillId(billId);
+        batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0));
+        batchMessageTipsHeader.setSuccessCount(success);
+        this.writeSuccessData(batchMessageTipsHeader);
         return null;
     }
+
     /**
      * 撤销签署流程
+     *
      * @param request
      * @param response
      * @param modelMap
@@ -120,13 +152,14 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
     public String revoke_by_fileAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
         BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
         String billId = this.getBillId(request);
-        String revokeReason =request.getParameter("revokeReason");
+        String revokeReason = request.getParameter("revokeReason");
         int failure = 0;
         int success = 0;
         try {
-            if(billId.indexOf(",")>=0){
+            if (billId.indexOf(",") >= 0) {
                 throw new EsignException("请选择一行记录发起签署");
             }
+
             IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx());
             SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
             selectorItemCollection.add(new SelectorItemInfo("*"));
@@ -135,18 +168,21 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
             ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId));
             PersonInfo person = info.getPerson();
             PersonInfo operator = info.getOperator();
-            String personId=null;
-            if(null!=person&&null!=person.getId()){
-                personId=person.getId().toString();
+            String personId = null;
+            if (null != person && null != person.getId()) {
+                personId = person.getId().toString();
+            }
+            String operatorId = null;
+            if (null != operator && null != operator.getId()) {
+                operatorId = operator.getId().toString();
             }
-            String operatorId=null;
-            if(null!=operator&&null!=operator.getId()){
-                operatorId=operator.getId().toString();
+            if (StringUtils.isBlank(info.getSignFlowId())) {
+                throw new EsignException("没有签署流程id");
             }
-            EsignHttpResponse httpRes =EsignHttpUtil.revoke_by_file(this.getCtx(),info.getSignFlowId(),revokeReason,info.getEfileId());
-            if(httpRes.getStatus()>=200&&httpRes.getStatus()<300) {
+            EsignHttpResponse httpRes = EsignHttpUtil.revoke_by_file(this.getCtx(), info.getSignFlowId(), revokeReason, info.getEfileId());
+            if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) {
                 JSONObject object = JSON.parseObject(httpRes.getBody());
-                if("0".equals(String.valueOf(object.get("code")))) {
+                if ("0".equals(String.valueOf(object.get("code")))) {
 
                     BatchMessageTipsBody body = new BatchMessageTipsBody();
                     body.setMuitTipsState(Boolean.TRUE);
@@ -154,35 +190,38 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
                     body.setId(billId);
                     batchMessageTipsHeader.addResult(body);
                     success++;
-                }else {
+                } else {
                     BatchMessageTipsBody body = new BatchMessageTipsBody();
                     body.setMuitTipsState(Boolean.FALSE);
                     body.setMuitTipsMessage(httpRes.getBody());
                     body.setId(billId);
                     batchMessageTipsHeader.addResult(body);
                 }
-            }else {
+            } else {
                 BatchMessageTipsBody body = new BatchMessageTipsBody();
                 body.setMuitTipsState(Boolean.FALSE);
                 body.setMuitTipsMessage(httpRes.getBody());
                 body.setId(billId);
                 batchMessageTipsHeader.addResult(body);
             }
-            batchMessageTipsHeader.setBillId(billId);
-            batchMessageTipsHeader.setFailureCount((success>0?1:0));
-            batchMessageTipsHeader.setSuccessCount(success);
-            this.writeSuccessData(batchMessageTipsHeader);
-        }catch (EsignException e){
+
+        } catch (EsignException e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
         }
+        batchMessageTipsHeader.setBillId(billId);
+        batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0));
+        batchMessageTipsHeader.setSuccessCount(success);
+        this.writeSuccessData(batchMessageTipsHeader);
         return null;
     }
+
     /**
      * 催签流程中签署人
+     *
      * @param request
      * @param response
      * @param modelMap
@@ -195,29 +234,52 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
         int failure = 0;
         int success = 0;
         try {
-            if(billId.indexOf(",")>=0){
+            if (billId.indexOf(",") >= 0) {
                 throw new EsignException("请选择一行记录发起签署");
             }
             IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx());
             SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
             selectorItemCollection.add(new SelectorItemInfo("*"));
             selectorItemCollection.add(new SelectorItemInfo("person.id"));
-            selectorItemCollection.add(new SelectorItemInfo("person.id"));
+            selectorItemCollection.add(new SelectorItemInfo("operator.id"));
             ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId));
             PersonInfo person = info.getPerson();
             PersonInfo operator = info.getOperator();
-            String personId=null;
-            if(null!=person&&null!=person.getId()){
-                personId=person.getId().toString();
+            String personId = null;
+            if (null != person && null != person.getId()) {
+                personId = person.getId().toString();
+            }
+            String operatorId = null;
+            if (null != operator && null != operator.getId()) {
+                operatorId = operator.getId().toString();
             }
-            String operatorId=null;
-            if(null!=operator&&null!=operator.getId()){
-                operatorId=operator.getId().toString();
+
+            if (StringUtils.isBlank(info.getSignFlowId())) {
+                throw new EsignException("没有签署流程id");
             }
-            EsignHttpResponse httpRes =EsignHttpUtil.urge_by_file(this.getCtx(),info.getSignFlowId(),null,info.getEfileId());
-            if(httpRes.getStatus()>=200&&httpRes.getStatus()<300) {
+            String json = info.getRequestParams();
+            JSONObject params = JSON.parseObject(json);
+            Map<String, Object> jsonMap = Maps.newHashMap();
+            Set<String> noticeSet = Sets.newHashSet();
+            JSONArray jsonArray = params.getJSONArray("signers");
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject param = jsonArray.getJSONObject(i);
+                JSONObject noticeConfig = param.getJSONObject("noticeConfig");
+                if (null != noticeConfig) {
+                    String noticeTypeStr = noticeConfig.getString("noticeTypes");
+                    if (StringUtils.isNotBlank(noticeTypeStr)) {
+                        String[] noticeTypes = noticeTypeStr.split(",");
+                        for (String nts : noticeTypes) {
+                            noticeSet.add(nts);
+                        }
+                    }
+                }
+            }
+            jsonMap.put("noticeTypes", StringUtils.join(noticeSet.toArray(), ","));
+            EsignHttpResponse httpRes = EsignHttpUtil.urge_by_file(this.getCtx(), info.getSignFlowId(), JSON.toJSONString(jsonMap), info.getEfileId());
+            if (httpRes.getStatus() >= 200 && httpRes.getStatus() < 300) {
                 JSONObject object = JSON.parseObject(httpRes.getBody());
-                if("0".equals(String.valueOf(object.get("code")))) {
+                if ("0".equals(String.valueOf(object.get("code")))) {
 
                     BatchMessageTipsBody body = new BatchMessageTipsBody();
                     body.setMuitTipsState(Boolean.TRUE);
@@ -225,32 +287,286 @@ public class ESignGlobalStatusOverviewListHandler extends ListHandler {
                     body.setId(billId);
                     batchMessageTipsHeader.addResult(body);
                     success++;
-                }else {
+                } else {
                     BatchMessageTipsBody body = new BatchMessageTipsBody();
                     body.setMuitTipsState(Boolean.FALSE);
                     body.setMuitTipsMessage(httpRes.getBody());
                     body.setId(billId);
                     batchMessageTipsHeader.addResult(body);
                 }
-            }else {
+            } else {
                 BatchMessageTipsBody body = new BatchMessageTipsBody();
                 body.setMuitTipsState(Boolean.FALSE);
                 body.setMuitTipsMessage(httpRes.getBody());
                 body.setId(billId);
                 batchMessageTipsHeader.addResult(body);
             }
-            batchMessageTipsHeader.setBillId(billId);
-            batchMessageTipsHeader.setFailureCount((success>0?1:0));
-            batchMessageTipsHeader.setSuccessCount(success);
-            this.writeSuccessData(batchMessageTipsHeader);
-        }catch (EsignException e){
+        } catch (EsignException e) {
+            e.printStackTrace();
+            throw new ShrWebBizException(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ShrWebBizException(e);
+        }
+        batchMessageTipsHeader.setBillId(billId);
+        batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0));
+        batchMessageTipsHeader.setSuccessCount(success);
+        this.writeSuccessData(batchMessageTipsHeader);
+        return null;
+    }
+
+    public String previewAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+
+        BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
+        String billId = this.getBillId(request);
+        String update = request.getParameter("upd");
+        int failure = 0;
+        int success = 0;
+        try {
+            if (billId.indexOf(",") >= 0) {
+                throw new EsignException("请选择一行记录发起签署");
+            }
+            ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(this.getCtx());
+            IESignGlobalStatusOverview globalStatusOverview = ESignGlobalStatusOverviewFactory.getLocalInstance(this.getCtx());
+            SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
+            selectorItemCollection.add(new SelectorItemInfo("*"));
+            selectorItemCollection.add(new SelectorItemInfo("person.id"));
+            selectorItemCollection.add(new SelectorItemInfo("operator.id"));
+            ESignGlobalStatusOverviewInfo info = globalStatusOverview.getESignGlobalStatusOverviewInfo(new ObjectUuidPK(billId));
+            if (StringUtils.isBlank(info.getSignFlowId())) {
+                throw new EsignException("没有签署流程id");
+            }
+            boolean canLive = false;
+            //更新附件
+            if ("update".equals(update)) {
+                this.delAttachment(this.getCtx(), info);
+                canLive = true;
+            } else if (EsignStatusEnum.COMPLETED.equals(info.getEsignStatus())) {
+                //成功签署的附件
+                FilterInfo filterInfo = new FilterInfo();
+                filterInfo.getFilterItems().add(new FilterItemInfo("propertyName", "files"));
+                String bunding = MessageFormat.format("{0}#{1}", EsignStatusEnum.COMPLETED_VALUE, info.getSignFlowId());
+                filterInfo.getFilterItems().add(new FilterItemInfo("bunding", bunding));
+                filterInfo.getFilterItems().add(new FilterItemInfo("boID", info.getId().toString()));
+                boolean canCompleted = SHRAttchExt.exists(filterInfo);
+                //没有成功签署的附件时,更新附件
+                if (!canCompleted) {
+                    this.delAttachment(this.getCtx(), info);
+                    canLive = true;
+                }
+            } else {
+                //预览中文件会更新所以需要删除重新下载
+                this.delAttachment(this.getCtx(), info);
+                canLive = true;
+            }
+            if (canLive) {
+                EsignHttpResponse response1 = null;
+                if (EsignStatusEnum.COMPLETED.equals(info.getEsignStatus())) {
+                    response1 = EsignHttpUtil.getFile_download_url(this.getCtx(), info.getSignFlowId(), 3600, info.getEfileId());
+                    JSONObject jsonObject = JSON.parseObject(response1.getBody());
+                    Integer code = (Integer) jsonObject.get("code");
+                    if (code == 0) {
+                        JSONObject jsonData = jsonObject.getJSONObject("data");
+                        JSONArray files = jsonData.getJSONArray("files");
+                        for (int i = 0; i < files.size(); i++) {
+                            JSONObject fileMap = files.getJSONObject(i);
+                            this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "files");
+                        }
+                        JSONArray attachments = jsonData.getJSONArray("attachments");
+                        for (int i = 0; i < attachments.size(); i++) {
+                            JSONObject fileMap = attachments.getJSONObject(i);
+                            this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "attachments");
+                        }
+                    }
+                } else {
+                    String json = info.getRequestParams();
+                    JSONObject params = JSON.parseObject(json);
+                    JSONArray docs = params.getJSONArray("docs");
+                    for (int i = 0; i < docs.size(); i++) {
+                        JSONObject doc = docs.getJSONObject(i);
+                        String fileId = doc.getString("fileId");
+                        response1 = EsignHttpUtil.getPreview_file_download_url(this.getCtx(), info.getSignFlowId(),fileId, info.getEfileId());
+                        JSONObject jsonObject = JSON.parseObject(response1.getBody());
+                        Integer code = (Integer) jsonObject.get("code");
+                        if (code == 0) {
+                            JSONObject fileMap = jsonObject.getJSONObject("data");
+                            this.saveAttachment(this.getCtx(), info, fileMap, "com.kingdee.eas.custom.esign.app.ESignGlobalStatusOverview.list", "files");
+                        }
+                    }
+                }
+            }
+            BatchMessageTipsBody body = new BatchMessageTipsBody();
+            body.setMuitTipsState(Boolean.TRUE);
+            body.setMuitTipsMessage("成功");
+            body.setId(billId);
+            batchMessageTipsHeader.addResult(body);
+            success++;
+        } catch (EsignException e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
         }
+        batchMessageTipsHeader.setBillId(billId);
+        batchMessageTipsHeader.setFailureCount((success <= 0 ? 1 : 0));
+        batchMessageTipsHeader.setSuccessCount(success);
+        this.writeSuccessData(batchMessageTipsHeader);
         return null;
     }
 
+    private void delAttachment(Context ctx, ESignGlobalStatusOverviewInfo info) throws BOSException, EASBizException {
+        ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(ctx);
+        IAttachment attachment = AttachmentFactory.getLocalInstance(ctx);
+        IBoAttchAsso attchAsso = BoAttchAssoFactory.getLocalInstance(ctx);
+        EntityViewInfo entityViewInfo = new EntityViewInfo();
+        FilterInfo filterInfo2 = new FilterInfo();
+        filterInfo2.getFilterItems().add(new FilterItemInfo("boID", info.getId().toString()));
+        entityViewInfo.setFilter(filterInfo2);
+        SHRAttachmentExtCollection collection = SHRAttchExt.getSHRAttachmentExtCollection(entityViewInfo);
+        for (int i = 0; i < collection.size(); i++) {
+            String attId = collection.get(i).getAttachment().getId().toString();
+            attchAsso.delete(MessageFormat.format(" where attachment = ''{0}''", attId));
+            attachment.delete(new ObjectUuidPK(attId));
+        }
+        SHRAttchExt.delete(filterInfo2);
+    }
+
+    /**
+     * 保存附件
+     *
+     * @param ctx
+     * @param info
+     * @param fileMap
+     * @param uipk
+     * @param propertyName
+     * @throws IOException
+     * @throws ShrWebBizException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    private void saveAttachment(Context ctx, ESignGlobalStatusOverviewInfo info, JSONObject fileMap, String uipk, String propertyName) throws IOException, ShrWebBizException, BOSException, EASBizException {
+        String fileId = fileMap.getString("fileId");
+        String fileName = fileMap.getString("fileName");
+        String downloadUrl = fileMap.getString("downloadUrl");
+        if(StringUtils.isBlank(downloadUrl)) {
+            downloadUrl = fileMap.getString("fileDownloadUrl");
+        }
+        IAttachment attachment = AttachmentFactory.getLocalInstance(ctx);
+        IBoAttchAsso attchAsso = BoAttchAssoFactory.getLocalInstance(ctx);
+        ISHRAttachmentExt SHRAttchExt = SHRAttachmentExtFactory.getLocalInstance(ctx);
+        byte[] content = DownloaderUtil.downloadFileToByteArray(downloadUrl);
+        fileName = this.checkScriptAttack(fileName);
+        String mainname = fileName.substring(0, fileName.lastIndexOf(46));
+        String extname = fileName.substring(fileName.lastIndexOf(46) + 1, fileName.length());
+        extname = extname.toLowerCase();
+        SHRAttachmentExtInfo attchExt = new SHRAttachmentExtInfo();
+        AttachmentInfo ai = new AttachmentInfo();
+        this.setAttMulNameAndDesc(ctx, ai, mainname, fileId);
+        ai.setSimpleName(extname);
+        ai.setFile(content);
+        ai.setIsShared(false);
+        ai.setNumber("files");
+        ai.setSharedDesc(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "false"));
+        int size = content.length;
+        if (size < 1024) {
+            ai.setSize(size + SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "byte"));
+        } else {
+            ai.setSize(size / 1024 + "KB");
+        }
+        ai.setSizeInByte(size);
+        ai.setAttachID("" + System.currentTimeMillis());
+        ai.setType(this.getFileType(fileName));
+        ai.setBeizhu(uipk);
+        attchExt.setAttachment(ai);
+        this.setAttExtMulNameAndDesc(ctx, attchExt, fileName, fileId);
+        attchExt.setPropertyName(propertyName);
+        attchExt.setType(AttachmentTypeEnum.PROPERTY);
+        attchExt.setState(AttachmentState.UNSAVE);
+        String bunding = MessageFormat.format("{0}#{1}", info.getEsignStatus().getValue(), info.getSignFlowId());
+        attchExt.setBunding(bunding);
+        attchExt.setBoID(info.getId().toString());
+        try {
+            attachment.addnew(ai);
+        } catch (Exception var20) {
+            throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "upload_error"), var20);
+        }
+        attchExt.setState(AttachmentState.SAVE);
+        BoAttchAssoInfo boAttchAssoInfo = new BoAttchAssoInfo();
+        boAttchAssoInfo.setBoID(info.getId().toString());
+        boAttchAssoInfo.setAssoBusObjType(String.valueOf(info.getBOSType()));
+        boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l1);
+        boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l2);
+        boAttchAssoInfo.setAssoType("Added Accessories", LocaleUtils.locale_l3);
+        boAttchAssoInfo.setAttachment(ai);
+        attchAsso.addnew(boAttchAssoInfo);
+        SHRAttchExt.addnew(attchExt);
+    }
+
+    private String getFileType(String fullname) {
+        String extname = fullname.substring(fullname.lastIndexOf(46) + 1, fullname.length());
+        if (!"doc".equalsIgnoreCase(extname) && !"docx".equalsIgnoreCase(extname)) {
+            if (!"xls".equalsIgnoreCase(extname) && !"xlsx".equalsIgnoreCase(extname) && !"xlsm".equalsIgnoreCase(extname) && !"xlsb".equalsIgnoreCase(extname)) {
+                if (!"ppt".equalsIgnoreCase(extname) && !"pptx".equalsIgnoreCase(extname) && !"pptm".equalsIgnoreCase(extname)) {
+                    return "txt".equalsIgnoreCase(extname) ? SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "text") : MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "unknow_type"), extname);
+                } else {
+                    return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_ppt");
+                }
+            } else {
+                return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_excel");
+            }
+        } else {
+            return SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "microsoft_word");
+        }
+    }
+
+    private String checkScriptAttack(String str) {
+        if (!StringUtils.isEmpty(str)) {
+            if (str.contains("<")) {
+                str.replaceAll("<", "&lt;");
+            }
+
+            if (str.contains(">")) {
+                str.replaceAll(">", "&gt;");
+            }
+        }
+
+        return str;
+    }
+
+    private void setAttMulNameAndDesc(Context ctx, AttachmentInfo att, String name, String desc) {
+        if (att != null && !StringUtils.isEmpty(name)) {
+            MutilanUtils.setMultiFieldValueToBean(ctx, "name", att, name);
+            MutilanUtils.setMultiFieldValueToBean(ctx, "description", att, desc);
+        }
+    }
+
+    private void setAttExtMulNameAndDesc(Context ctx, SHRAttachmentExtInfo info, String name, String desc) {
+        if (info != null && !StringUtils.isEmpty(name)) {
+            Locale locale = ctx.getLocale();
+            info.setName(name, LocaleUtils.locale_l1);
+            info.setDescription(desc, LocaleUtils.locale_l1);
+            if (LocaleUtils.locale_l1.getDisplayName().equals(LocaleUtils.getLocaleString(locale))) {
+                info.setName(name, LocaleUtils.locale_l2);
+                info.setName(name, LocaleUtils.locale_l3);
+                info.setDescription(desc, LocaleUtils.locale_l2);
+                info.setDescription(desc, LocaleUtils.locale_l3);
+            } else if (LocaleUtils.locale_l2.getDisplayName().equals(LocaleUtils.getLocaleString(locale))) {
+                info.setName(name, LocaleUtils.locale_l2);
+                info.setName(STConverter.sc2tc(name), LocaleUtils.locale_l3);
+                if (!StringUtils.isEmpty(desc)) {
+                    info.setDescription(desc, LocaleUtils.locale_l2);
+                    info.setDescription(STConverter.sc2tc(desc), LocaleUtils.locale_l3);
+                }
+            } else {
+                info.setName(STConverter.tc2sc(name), LocaleUtils.locale_l2);
+                info.setName(name, LocaleUtils.locale_l3);
+                if (!StringUtils.isEmpty(desc)) {
+                    info.setDescription(STConverter.tc2sc(desc), LocaleUtils.locale_l2);
+                    info.setDescription(desc, LocaleUtils.locale_l3);
+                }
+            }
+
+        }
+    }
 }

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor