Browse Source

更新元数据

heyuan 1 month ago
parent
commit
9a818533b0

+ 55 - 0
metadata/com/kingdee/eas/custom/esign/app/ESignTemplate.entity

@@ -166,6 +166,38 @@
             </parameters>
             <configured>false</configured>
         </method>
+        <method>
+            <name>syncTemplateFields</name>
+            <isListenerMethod>false</isListenerMethod>
+            <alias>entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].alias</alias>
+            <description>entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].description</description>
+            <innerID>7f60f1ac-80ce-46a0-9083-3c56a021bb5f</innerID>
+            <accessLevel>public</accessLevel>
+            <subClassingMode>normal</subClassingMode>
+            <returnValueType />
+            <metadataRef />
+            <transactionAttribute>Required</transactionAttribute>
+            <userDefined>true</userDefined>
+            <userDefinedLogic />
+            <parameters>
+                <parameter>
+                    <name>billId</name>
+                    <alias>entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].parameters.parameter[billId].alias</alias>
+                    <description>entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].parameters.parameter[billId].description</description>
+                    <direction>in</direction>
+                    <dataType>String</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+            </parameters>
+            <exceptions>
+                <bizException>
+                    <key name="package" value="com.kingdee.eas.common" />
+                    <key name="name" value="EASBizException" />
+                </bizException>
+            </exceptions>
+            <configured>false</configured>
+        </method>
     </methods>
     <isAbstract>false</isAbstract>
     <bizUnitPK>com.kingdee.eas.custom.esign.ESignTemplate</bizUnitPK>
@@ -496,6 +528,29 @@
             <lang locale="zh_HK" value="null" />
             <lang locale="zh_TW" value="null" />
         </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].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.ESignTemplate].methods.method[syncTemplateFields].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].methods.method[syncTemplateFields].parameters.parameter[billId].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.ESignTemplate].methods.method[syncTemplateFields].parameters.parameter[billId].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
         <rs key="entityObject[com.kingdee.eas.custom.esign.app.ESignTemplate].properties.linkProperty[entrys].alias">
             <lang locale="en_US" value="null" />
             <lang locale="zh_CN" value="电子签文件模板" />

+ 14 - 1
src/com/kingdee/eas/custom/esign/ESignTemplate.java

@@ -12,8 +12,8 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.metadata.entity.SelectorItemCollection;
-import com.kingdee.eas.framework.DataBase;
 import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.DataBase;
 import com.kingdee.eas.framework.IDataBase;
 import com.kingdee.eas.framework.CoreBaseCollection;
 import com.kingdee.eas.custom.esign.app.*;
@@ -125,4 +125,17 @@ public class ESignTemplate extends DataBase implements IESignTemplate
             throw new EJBRemoteException(err);
         }
     }
+    /**
+     *ͬ²½Ä£°å×Ö¶Î-User defined method
+     *@param billId µ¥¾Ýid
+     */
+    public void syncTemplateFields(String billId) throws BOSException, EASBizException
+    {
+        try {
+            getController().syncTemplateFields(getContext(), billId);
+        }
+        catch(RemoteException err) {
+            throw new EJBRemoteException(err);
+        }
+    }
 }

+ 1 - 0
src/com/kingdee/eas/custom/esign/IESignTemplate.java

@@ -27,4 +27,5 @@ public interface IESignTemplate extends IDataBase
     public ESignTemplateCollection getESignTemplateCollection() throws BOSException;
     public ESignTemplateCollection getESignTemplateCollection(EntityViewInfo view) throws BOSException;
     public ESignTemplateCollection getESignTemplateCollection(String oql) throws BOSException;
+    public void syncTemplateFields(String billId) throws BOSException, EASBizException;
 }

+ 24 - 0
src/com/kingdee/eas/custom/esign/app/AbstractESignTemplateControllerBean.java

@@ -190,6 +190,30 @@ public abstract class AbstractESignTemplateControllerBean extends DataBaseContro
         return super._getCollection(ctx, svcCtx, oql);
     }
 
+    public void syncTemplateFields(Context ctx, String billId) throws BOSException, EASBizException
+    {
+        try {
+            ServiceContext svcCtx = createServiceContext(new MetaDataPK("7f60f1ac-80ce-46a0-9083-3c56a021bb5f"), new Object[]{ctx, billId});
+            invokeServiceBefore(svcCtx);
+              if(!svcCtx.invokeBreak()) {
+            _syncTemplateFields(ctx, billId);
+            }
+            invokeServiceAfter(svcCtx);
+        } catch (BOSException ex) {
+            this.setRollbackOnly();
+            throw ex;
+        } catch (EASBizException ex0) {
+            this.setRollbackOnly();
+            throw ex0;
+        } finally {
+            super.cleanUpServiceState();
+        }
+    }
+    protected void _syncTemplateFields(Context ctx, String billId) throws BOSException, EASBizException
+    {    	
+        return;
+    }
+
     public DataBaseCollection getDataBaseCollection (Context ctx) throws BOSException
     {
     	return (DataBaseCollection)(getESignTemplateCollection(ctx).cast(DataBaseCollection.class));

+ 1 - 0
src/com/kingdee/eas/custom/esign/app/ESignTemplateController.java

@@ -32,4 +32,5 @@ public interface ESignTemplateController extends DataBaseController
     public ESignTemplateCollection getESignTemplateCollection(Context ctx) throws BOSException, RemoteException;
     public ESignTemplateCollection getESignTemplateCollection(Context ctx, EntityViewInfo view) throws BOSException, RemoteException;
     public ESignTemplateCollection getESignTemplateCollection(Context ctx, String oql) throws BOSException, RemoteException;
+    public void syncTemplateFields(Context ctx, String billId) throws BOSException, EASBizException, RemoteException;
 }

+ 113 - 1
src/com/kingdee/eas/custom/esign/app/ESignTemplateControllerBean.java

@@ -1,13 +1,21 @@
 package com.kingdee.eas.custom.esign.app;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.kingdee.bos.dao.IObjectValue;
 import com.kingdee.bos.dao.ormapping.CanNotDeleteException;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.bos.metadata.entity.FilterInfo;
 import com.kingdee.bos.metadata.entity.FilterItemCollection;
 import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
 import com.kingdee.bos.metadata.query.util.CompareType;
 import com.kingdee.bos.util.BOSUuid;
-import com.kingdee.eas.custom.esign.ESignTemplateInfo;
+import com.kingdee.eas.custom.esign.*;
+import com.kingdee.eas.custom.esign.bizEnum.SyncStatusEnum;
+import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
+import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
+import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
 import com.kingdee.shr.base.syssetting.BaseItemStateEnum;
 import com.kingdee.util.StringUtils;
 import org.apache.log4j.Logger;
@@ -17,6 +25,9 @@ import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.eas.common.EASBizException;
 
 import java.sql.Connection;
+import java.sql.Time;
+import java.util.HashMap;
+import java.util.Map;
 
 public class ESignTemplateControllerBean extends AbstractESignTemplateControllerBean {
     private static Logger logger = Logger.getLogger(ESignTemplateControllerBean.class);
@@ -68,4 +79,105 @@ public class ESignTemplateControllerBean extends AbstractESignTemplateController
         }
     }
 
+    /**
+     * 同步模板字段
+     *
+     * @param ctx
+     * @param billId
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    @Override
+    protected void _syncTemplateFields(Context ctx, String billId)
+            throws BOSException, EASBizException {
+        super._syncTemplateFields(ctx, billId);
+        if (org.apache.commons.lang3.StringUtils.isBlank(billId)) {
+            throw new EASBizException(EASBizException.CHECKBLANK, new Object[]{"单据id不能为空!"});
+        }
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("entrys.*");
+        sic.add("entrys.fields.*");
+        ESignTemplateInfo info = getESignTemplateInfo(ctx, new ObjectUuidPK(billId), sic);
+        ESignTemplateFileEntryCollection entrys = info.getEntrys();
+        for (int i = 0; i < entrys.size(); i++) {
+            ESignTemplateFileEntryInfo entryInfo = entrys.get(i);
+            String eSignTemplateId = entryInfo.getESignTemplateId();
+            try {
+                if (org.apache.commons.lang3.StringUtils.isBlank(eSignTemplateId)) {
+                    throw new BOSException("e 签宝模板 id为空!");
+                }
+                //1.调用接口获取模板字段
+                EsignHttpResponse response = null;
+                try {
+                    response = EsignHttpUtil.getDocTemplatesDetailById(eSignTemplateId);
+                } catch (EsignException e) {
+                    e.printStackTrace();
+                    throw new BOSException("调用e签宝接口报错: " + e.getMessage());
+                }
+                String body = response.getBody();
+                JSONObject jsonObject = JSONObject.parseObject(body);
+                if (0 != jsonObject.getInteger("code")) {
+                    throw new BOSException(jsonObject.getString("message"));
+                }
+                JSONObject data = jsonObject.getJSONObject("data");
+                //附件下载地址
+                String fileDownloadUrl = data.getString("fileDownloadUrl");
+                JSONArray components = data.getJSONArray("components");
+                //2.比较现有模板字段,如果新增字段则添加,删除字段就更新为失效
+                ESignTemplateFileEntryFieldCollection fields = entryInfo.getFields();
+                Map<String, ESignTemplateFileEntryFieldInfo> fieldMap = new HashMap<String, ESignTemplateFileEntryFieldInfo>();
+                for (int j = 0; j < fields.size(); j++) {
+                    ESignTemplateFileEntryFieldInfo fieldInfo = fields.get(j);
+                    fieldMap.put(fieldInfo.getTemplateFieldId(), fieldInfo);
+                }
+                for (int j = 0; j < components.size(); j++) {
+                    JSONObject component = components.getJSONObject(j);
+                    //组件id
+                    String componentId = component.getString("componentId");
+                    //组件编码(可以为空)
+                    String componentKey = component.getString("componentKey");
+                    //组件名称
+                    String componentName = component.getString("componentName");
+                    //是否必填
+                    boolean isRrequired = component.getBoolean("required");
+                    //组件排序,从1开始
+                    int componentOrder = component.getInteger("componentOrder");
+                    ESignTemplateFileEntryFieldInfo fieldInfo = fieldMap.get(componentId);
+                    if (fieldInfo != null) {
+                        fieldMap.remove(componentId);
+                    } else {
+                        fieldInfo = new ESignTemplateFileEntryFieldInfo();
+                        fieldInfo.setTemplateFieldId(componentId);
+                        fields.add(fieldInfo);
+                    }
+                    //修改字段名称
+                    fieldInfo.setTemplateFieldName(componentName);
+                    //修改字段排序
+                    fieldInfo.setSeq(componentOrder);
+                    //修改是否必填
+                    fieldInfo.setRequired(isRrequired);
+                    //组件编码
+                    fieldInfo.setTemplateFieldKey(componentKey);
+                }
+                if (!fieldMap.isEmpty()) {
+                    //已经失效的字段
+                    for (String componentId : fieldMap.keySet()) {
+                        fieldMap.get(componentId).setInvalid(true);
+                    }
+                }
+                entryInfo.setSyncStatus(SyncStatusEnum.SYNCED);
+                entryInfo.setSyncResult("同步成功");
+            } catch (BOSException e) {
+                logger.error(e.getMessage(), e);
+                entryInfo.setSyncStatus(SyncStatusEnum.SYNC_FAILED);
+                entryInfo.setSyncResult(e.getMessage());
+//                throw new RuntimeException(e);
+            }
+            entryInfo.setSyncTime(new Time(System.currentTimeMillis()));
+        }
+        //更新
+        update(ctx, new ObjectUuidPK(billId), info);
+        //3.同步模板附件
+        //syncTemplateAttachments(ctx, billId);
+    }
 }

+ 19 - 2
src/com/kingdee/eas/custom/esign/app/ESignTemplateFileEntryControllerBean.java

@@ -7,6 +7,9 @@ import com.kingdee.bos.dao.ormapping.CanNotDeleteException;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.eas.custom.esign.*;
 import com.kingdee.eas.custom.esign.bizEnum.SyncStatusEnum;
+import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
+import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
+import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
 import com.kingdee.shr.base.syssetting.BaseItemStateEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
@@ -111,8 +114,22 @@ public class ESignTemplateFileEntryControllerBean extends AbstractESignTemplateF
             throw new BOSException("e 签宝模板 id为空!");
         }
         //1.调用接口获取模板字段
-        String fileDownloadUrl = "https://api.esign.kingdee.com/api/v1/templates/" + eSignTemplateId + "/components";
-        JSONArray components = null;
+        EsignHttpResponse response = null;
+        try {
+            response = EsignHttpUtil.getDocTemplatesDetailById(eSignTemplateId);
+        } catch (EsignException e) {
+            e.printStackTrace();
+            throw new BOSException("调用e签宝接口报错: " + e.getMessage());
+        }
+        String body = response.getBody();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        if (0 != jsonObject.getInteger("code")) {
+            throw new BOSException(jsonObject.getString("message"));
+        }
+        JSONObject data = jsonObject.getJSONObject("data");
+        //附件下载地址
+        String fileDownloadUrl = data.getString("fileDownloadUrl");
+        JSONArray components = data.getJSONArray("components");
         //2.比较现有模板字段,如果新增字段则添加,删除字段就更新为失效
         ESignTemplateFileEntryFieldCollection fields = eSignTemplateFileEntryInfo.getFields();
         Map<String, ESignTemplateFileEntryFieldInfo> fieldMap = new HashMap<String, ESignTemplateFileEntryFieldInfo>();